Django AWS Elastic Beanstalk迁移数据库

标签 django amazon-web-services amazon-elastic-beanstalk

我正在使用Elastic Beanstalk将Django项目部署到AWS,并且一直无法迁移数据库。

我在哪里:我能够成功部署django项目并通过mysubdomain.elasticbeanstalk.com加载页面。页面加载没有错误,直到我到达需要进行数据库调用的页面为止。然后,由于未迁移数据库,因此我收到类似relation "accounts_user" does not exist LINE 1: SELECT COUNT(*) FROM "accounts_user"的错误。

我尝试过的事情:我已经尝试了很多事情。幸运的是,这里有大量的stackoverflow帖子和一些教程。不幸的是,他们似乎都使用了不同的版本,他们的建议不适用于我的项目。

对我来说很明显,我需要在foobar.config文件夹内的.ebextensions/文件中运行迁移。这是我想做的事情的基础:

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进行迁移。由于相关的Docker容器是afaik的最后一个启动,因此我使用docker ps -a --no-trunc -q | head -n 1来获取容器ID。

最后,我的setup.config看起来像这样

container_commands:
  01syncdb:
    command: "docker exec `docker ps -a --no-trunc -q | head -n 1` /var/app/bin/python /var/app/manage.py syncdb --noinput  &>> /tmp/deploy.log"
    leader_only: true
  02migrate:
    command: "docker exec `docker ps -a --no-trunc -q | head -n 1` /var/app/bin/python /var/app/manage.py migrate --noinput  &>> /tmp/deploy.log"
    leader_only: true

我希望这也能解决您的问题。

关于Django AWS Elastic Beanstalk迁移数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29540131/

相关文章:

Django 如何以模型形式保存 url 中的图像?

python - 在自定义 Django 日志记录处理程序中检索请求对象

amazon-web-services - Elastic beanstalk 部署时间超过超时时间,如何增加超时时间

encryption - 强制 S3 存储桶的服务器端加密

node.js - 在 Elastic Beanstalk 上使用 Yarn 安装软件包

java - 在 Beanstalk 中使用上下文路径部署 war 的可接受方式

javascript - 使用 Django 将 html5 Canvas 加载到 PIL 图像中

python - 如何在模型文件中建立 django 模型应定义为 NOT NULL?

java - 如何实时定位 Alexa 设备?

node.js - Elastic beanstalk 环境的 Cloudwatch 日志组中没有出现任何日志