【发布时间】:2015-06-14 21:57:56
【问题描述】:
我正在使用 Elastic Beanstalk 将 Django 项目部署到 AWS,并且一直在迁移数据库。
我在哪里:我能够成功部署我的 django 项目并通过 mysubdomain.elasticbeanstalk.com 加载页面。页面加载没有错误,直到我到达需要进行数据库调用的页面。然后我收到类似relation "accounts_user" does not exist LINE 1: SELECT COUNT(*) FROM "accounts_user" 的错误,因为我的数据库尚未迁移。
我尝试过的:我尝试了很多不同的方法。幸运的是,有大量的 stackoverflow 帖子和一些教程。不幸的是,他们似乎都在使用不同的版本,他们的建议不适用于我的项目。
我很清楚,我需要在 .ebextensions/ 文件夹内的 foobar.config 文件中运行迁移。这是我想做的基础:
container_commands:
01_migrate:
command: "python manage.py migrate --noinput"
leader_only: true
在日志中,我看到部署后脚本尝试运行但失败了。我没有收到有关该错误的任何其他信息,我看到的唯一内容是“错误:01_migrate 部署后脚本失败”
我发现我需要为命令激活虚拟环境,这是有道理的。从 asdf 我试试这个:
container_commands:
01_migrate:
command: "source /opt/python/run/venv/bin/activate && python rlg/manage.py migrate --noinput"
leader_only: true
但它不起作用。事实上,通过 SSH 我发现我什至没有 /opt/python/ 文件夹,只有 /opt/aws/ 和 /opt/elasticbeanstalk/。所有教程和 SO 问题都参考了这个文件夹,但我没有?
版本: Python 3.4.1、Django 1.7.7、AWS CLI 3.2.1、Postgres 9.3
【问题讨论】:
-
我被困在同一个地方。我发现:container_commands 不在 docker 容器中执行。它们在 ec2 实例本身上执行。我想我们必须使用类似“docker exec [container_name] /var/app/bin/python manage.py migrate --noinput 之类的东西来执行迁移,不幸的是我仍在努力寻找正确的 [container_name]
-
@SebastianAnnies 太棒了,很高兴我在同一个地方找到了人!感谢您的提示,我也会努力解决这个问题,并让您知道我发现的任何内容
-
不确定本教程的编写时间,但他们有一个 django 迁移特定部分 docs.aws.amazon.com/elasticbeanstalk/latest/dg/…
标签: django amazon-web-services amazon-elastic-beanstalk