【问题标题】:Can't migrate database because environments variables are not available beanstalk无法迁移数据库,因为环境变量不可用
【发布时间】: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.pydjango-admin.py 给我ERROR: ServiceError - Failed to deploy the application. 即使我有迁移并按照官方文件的建议设置环境。

标签: django amazon-elastic-beanstalk


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2012-08-02
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-11
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多