由于环境变量不可用,因此无法迁移数据库

时间:2018-10-11 13:57:48

标签: django amazon-elastic-beanstalk

我目前在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。现在,这完全破坏了环境变量的目的。

为什么我会收到此错误,并且有什么办法可以避免此错误?

1 个答案:

答案 0 :(得分:0)

您可能应该使用ebextensions定义环境变量。 这些是在执行container_commands之前设置的。 为此,请创建包含以下行的 .config 文件:

$client->call('getMessage')