django - 无法迁移数据库,因为环境变量不可用
问题描述
我目前在 AWS Beanstalk 上的 Django 服务器遇到了一个非常烦人的问题。
我的数据库和 S3 存储端点、帐户别名和密钥都作为环境变量存在,所以例如我会像这样访问我的数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': os.environ['RDS_DB_NAME'],
'USER': os.environ['RDS_USERNAME'],
'PASSWORD': os.environ['RDS_PASSWORD'],
'HOST': os.environ['RDS_HOSTNAME'],
'PORT': os.environ['RDS_PORT'],
'OPTIONS': {
'autocommit': True,
},
}
}
当我需要更改我的模型时,就会出现问题。我希望能够在每次更新后在 Beanstalk 上运行迁移,所以我在我的 ebextensions 配置文件中有这个。
container_commands:
01_migrate:
command: 'source /opt/python/run/venv/bin/activate && django-admin.py makemigrations'
command: 'source /opt/python/run/venv/bin/activate && django-admin.py migrate'
leader_only: true
但这不起作用,因为我得到了我需要的环境变量在这个阶段不存在的错误!所以如果我想运行我的容器命令,我需要将我的环境变量暴露给我的settings.py
. 现在这完全违背了环境变量的目的。
为什么我会收到此错误,有什么办法可以规避此错误吗?
解决方案
您可能应该使用 ebextensions 定义您的环境变量。这些是在执行 container_commands 之前设置的。为此,请使用以下行创建一个.config文件:
option_settings:
aws:elasticbeanstalk:application:environment:
FOO: bar
推荐阅读
- r - raster:: extract 生成一个空列表
- redis - Redis 发布/订阅。客户端接收消息时抛出的错误会影响发送消息的服务器吗?
- python - 使用 Python 中的条件更新 XML 节点值
- ag-grid - 在 ag-grid 中创建一个降低或增加列宽的按钮
- sql-server - 尝试在 SQL WHERE IN 语句中使用变量
- python-3.x - 无法提取表数据
- python - 为什么 scipy.optimize.fmin_tnc 没有收敛到我的代码中的最佳解决方案?
- nuxtjs - 如何从 this.$auth.fetchUser() 存储用户?
- python - 替换#Python中的重复字符串
- python - Django CoinMarketCap API 没有更新价格(django.db.utils.OperationalError: database is locked)