Python Django';在Amazon Elastic Beanstalk上的s migrate命令被终止
我正在使用亚马逊的弹性豆茎和Django 1.8.2。这是我的容器命令Python Django';在Amazon Elastic Beanstalk上的s migrate命令被终止,python,django,amazon-web-services,amazon-elastic-beanstalk,database-migration,Python,Django,Amazon Web Services,Amazon Elastic Beanstalk,Database Migration,我正在使用亚马逊的弹性豆茎和Django 1.8.2。这是我的容器命令 container_commands: 01_wsgipass: command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf' 02_makemigrations: command: "source /opt/python/run/venv/bin/activate && python manage.py makemi
container_commands:
01_wsgipass:
command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf'
02_makemigrations:
command: "source /opt/python/run/venv/bin/activate && python manage.py makemigrations --merge --noinput"
leader_only: true
03_migrate:
command: "source /opt/python/run/venv/bin/activate && python manage.py migrate --noinput"
leader_only: true
由于某些原因,migrate
命令被终止。即使在我的本地数据库中有一个新的数据库,所有迁移都可以正常工作。但以下是eb-activity.log上出现的错误
Synchronizing apps without migrations:
Creating tables...
Running deferred SQL...
Installing custom SQL...
Running migrations:
Rendering model states.../bin/sh: line 1: 21228 Killed python manage.py migrate --noinput
(ElasticBeanstalk::ExternalInvocationError)
注意:之前在Elastic Beanstalk中,相同的容器命令工作正常,没有任何问题。我用migrate命令尝试了--verbose3
,但没有得到任何其他调试消息
有什么解决办法吗?提前谢谢
当涉及到日志记录机制差的故障排除时,AWS对开发人员不友好
作为一个最近为Django项目评估EBS的热心AWS用户,出于同样的原因,我完全同意这一点。出于这个原因,我最终选择了Heroku,我不想再多说了,但我认为下面的模式对任何一种情况都有帮助
准备prod环境的步骤可以在不同的地方进行;它们不必发生在您的目标web服务器环境中
最后,我将生成/迁移任务从部署自动化中拉出来,放到了部署自动化之前发生的任务中。在我的目标web服务器环境中发生的唯一事情与该服务器上的代码直接相关
换句话说:我建议,如果您有一个用于构建/测试的CI工具,那么您可以将make/migrate和任何其他准备工作拉到Web服务器之外的环境中,并将其放到部署管道中。比如:
- 签出代码
- 运行测试(包括对临时数据库进行make/migrate测试,如果可能的话)
- 将应用程序置于维护模式(或类似模式,如果需要)
- 快照数据库
- 在生产时制作/迁移
- 部署
- 如果部署失败,回滚数据库、回滚应用程序
然后,将应用程序服务器的自动化问题与prod环境其余部分的自动化问题分离,并让CI来处理这些问题。您可以在相同的位置处理它们,但使用EBS的功能显然有点笨拙。我的迁移被终止,因为dockrun.aws.json文件中保留的内存太少。文档中提供的示例给出了“128”作为示例值,我刚刚使用了它。增加“内存”的值可以解决此问题 e、 g.dockrun.aws.json摘录:
"containerDefinitions": [
{
"name": "php-app",
"image": "php:fpm",
"essential": true,
"memory": 512,
// ... etc. ...
}
]
两个想法:你有没有得到更多的信息,你有没有考虑过改变你的计划?是的,我的超时时间已经是1000秒了。这看起来不像是超时错误。我检查了/var/log/cfn-init-cmd.log中的错误,它显示了相同的错误。没有详细的调试日志可用。如果您没有从EBS获得任何错误或其他有用的诊断,可能是其他原因造成的?你有没有考虑过它可能是操作系统-例如,你是操作系统的受害者?好的。我的迁移出现了一些问题,我通过ssh手动修复了它。但在那之后,我就有了这个问题。所以我的观点是,当涉及到日志记录机制差的故障排除时,AWS对开发人员不友好。或者,如果有一个日志文件来记录ExternalInvocationError命令错误,那么它在任何地方都不会被记录下来。我也被它击中了。通常在测试时,我们使用小型或微型实例,但它们不足以运行迁移脚本。这同样适用于运行node.js应用程序。因此,建议使用中等实例来查看问题是否得到解决。