簡體   English   中英

Django在Amazon Elastic Beanstalk上的遷移命令被終止

[英]Django's migrate command on Amazon Elastic Beanstalk is killed

我正在使用亞馬遜的Elastic Beanstalk和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中沒有任何問題,工作正常。 我嘗試使用--verbose 3 with migrate命令但沒有得到任何其他調試消息。

有解決方案嗎 提前致謝。

在使用較差的日志記錄機制進行故障排除時,AWS對開發人員不友好。

作為最近為Django項目評估EBS的狂熱AWS用戶,出於同樣的原因,我完全贊同這一點。 我最終和Heroku一起去了這個原因並且我不會進入,但我認為以下模式對任何一種方式都有幫助。

准備你的生產環境的步驟可以在不同的地方進行; 它們不必在您的目標Web服務器環境中發生。

我最終將我的make / migrate任務從我的部署自動化中拉出來,轉移到之前發生的任務中。 我的目標Web服務器環境中發生的唯一事情與該服務器上的代碼直接相關。

換句話說:如果您有用於構建/測試的CI工具,我建議您將make / migrate和任何其他准備工作拉到Web服務器之外的環境中,然后進入部署管道。 就像是:

  • 結帳代碼
  • 運行測試(包括在臨時數據庫上進行make / migrate以在可能的情況下測試它)
  • 將應用程序置於維護模式(或類似,如果需要)
  • 快照數據庫
  • 制作/遷移生產
  • 部署
  • 如果部署失敗,則回滾DB,回滾應用程序。

然后,您將分離應用程序服務器的自動化問題和其他prod環境的自動化問題,並讓CI處理該問題。 可以在同一個地方處理它們,但使用EBS的設施顯然有點笨拙。

我的遷移被殺死了,因為Dockerrun.aws.json文件中保留的內存太低了。 文檔中提供的示例給出了“128”作為樣本值,我剛剛使用過它。 增加“內存”的值可以解決問題。

例如Dockerrun.aws.json摘錄:

  "containerDefinitions": [
    {
      "name": "php-app",
      "image": "php:fpm",
      "essential": true,
      "memory": 512,
      // ... etc. ...
    }
  ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM