我正在向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