Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django';在Amazon Elastic Beanstalk上的s migrate命令被终止_Python_Django_Amazon Web Services_Amazon Elastic Beanstalk_Database Migration - Fatal编程技术网

Python Django';在Amazon Elastic Beanstalk上的s migrate命令被终止

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

我正在使用亚马逊的弹性豆茎和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 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应用程序。因此,建议使用中等实例来查看问题是否得到解决。