【发布时间】:2018-11-06 01:01:28
【问题描述】:
我目前在 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。现在这完全违背了环境变量的目的。
为什么会出现这个错误,有什么办法可以规避这个错误?
【问题讨论】:
-
始终在本地进行迁移并将其提交给自己的 git。然后做
eb deploy。此外,您不需要来源 venv。只需python3 manage.py migrate --noinput即可。 -
我有什么理由应该在本地运行迁移吗?
-
保持迁移一致。
-
OP 不应该在 beanstalk 上运行
makemigrations,但他/她肯定需要运行migrate。问题依然存在。 -
@VaibhavVishal 为什么不需要激活虚拟环境?并且还使用
python manage.py和django-admin.py给我ERROR: ServiceError - Failed to deploy the application.即使我有迁移并按照官方文件的建议设置环境。
标签: django amazon-elastic-beanstalk