我正在使用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
我也希望能解决您的问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句