首页 > 解决方案 > 无法迁移数据库,因为环境变量不可用

问题描述

我目前在 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. 现在这完全违背了环境变量的目的。

为什么我会收到此错误,有什么办法可以规避此错误吗?

标签: djangoamazon-elastic-beanstalk

解决方案


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

option_settings:
  aws:elasticbeanstalk:application:environment:
    FOO: bar

推荐阅读