【发布时间】:2021-02-07 21:47:06
【问题描述】:
部署我的 Django 项目时,未配置数据库设置,因为'RDS_HOSTNAME' in os.environ 返回false。事实上,在部署时没有环境属性可用。所有这些属性在部署后都可用。
运行 /opt/elasticbeanstalk/bin/get-config environment 会返回以下内容:
{"DJANGO_SETTINGS_MODULE":"myApp.settings","PYTHONPATH":"/var/app/venv/staging-LQM1lest/bin:$PYTHONPATH","RDS_DB_NAME":"ebdb","RDS_HOSTNAME":"xxxx.amazonaws.com","RDS_PASSWORD":"xxxx","RDS_PORT":"xxxx","RDS_USERNAME":"xxxx"}
所有带有 RDS 前缀的属性都已设置,但 os.environ 仍然无法读取它。
setting.py文件:
# [...]
if 'RDS_HOSTNAME' in os.environ:
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'],
}
}
# [...]
我是否必须进行任何更改才能使这些属性在部署时可用?
【问题讨论】:
-
我们的环境变量也遇到了同样的问题。在与 AWS 支持人员交谈后,他们告诉我们环境变量中的特殊字符破坏了变量的部署脚本并导致了问题。我们通过删除/更改具有特殊字符的变量来解决它。这是一个特别难以找到的问题,因为它不会在 EB 日志中引发错误......花了很长时间进行分类并得到解决。
-
旁注,特别是我认为它是一个未转义的
’,它会导致部署脚本停止在实例上设置变量。该变量将在 EB 控制台中正确显示,但实际上不会正确部署到环境中。 -
@hephalump; env var 中的特殊字符是指
RDS_DB_NAME中的_或其值中的任何特殊字符? -
没有。我的意思是在实际变量值中,在 EB 中的任何
env var中。我们的问题是我们在另一个env var’s(即实际变量值中的特殊字符)中有一个反引号,它正在转义env var部署脚本......虽然我们收到了成功的部署通知,但它不是成功。 -
@hephalump;是的。我也收到成功部署消息,并且日志文件中没有错误或警告。
标签: python django database amazon-web-services amazon-elastic-beanstalk