我正在向EB部署一個Django應用程序 - 我的第一個EB部署 - 並且我對事物的順序感到困惑。在Elastic Beanstalk上進行部署之後運行manage.py命令的正確方法?
我的容器命令有這些:
container_commands:
01_migrate:
command: "django-admin.py migrate"
leader_only: true
02_collectstatic:
command: "django-admin.py collectstatic --noinput"
leader_only: true
我已經注意到了,然而,就是我每次部署時,這些集裝箱命令我老代碼庫運行。假設我現在的代碼是app-v1.zip
。我更新我的models.py
,並創建一個遷移。然後我eb deploy
,這創建app-v2.zip
。 migrate
命令在EB環境中運行,但在舊代碼庫(app-v1.zip
)上運行,但app-v2.zip
解包爲/var/app/current
之前,因此我的遷移未應用。
如果我然後運行另一個eb deploy
,它將創建app-v3.zip
,但將在app-v2.zip
的代碼上運行migrate
。所以,它可以工作,但這意味着我需要每次運行eb deploy
兩次以更改數據模型或靜態文件(同樣的問題適用於collectstatic
)。
還有更多的解釋和解決方法on this blog post和this SO question,但所有的「部署Django到EB」教程都按照我使用container_commands
的方式來完成。
什麼是正確的方法?
確定嗎?我一直在使用EB一年,我從來沒有見過你描述的行爲。博客討論了這些命令在部署之前在臨時區域運行的事實,但臨時區域應該有您的新存檔。你能否提供更多關於你如何看待這種情況的細節? – dkarchmer