我目前在AWS Beanstalk上的Django服务器遇到一个非常烦人的问题。
我的数据库和S3存储端点,帐户别名和密钥都作为env变量存在,因此例如,我将像这样访问我的数据库
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
但是这是行不通的,因为某种程度上我会得到一个错误,即我需要的环境变量在此阶段不存在!因此,如果要运行容器命令,则需要将我的env变量公开给settings.py
。现在,这完全破坏了环境变量的目的。
为什么我会收到此错误,并且有什么办法可以避免此错误?
答案 0 :(得分:0)
您可能应该使用ebextensions定义环境变量。 这些是在执行container_commands之前设置的。 为此,请创建包含以下行的 .config 文件:
$client->call('getMessage')