Django 在弹性Beanstalk上部署后运行manage.py命令的正确方法?
我正在将Django应用程序部署到EB—这是我的第一次EB部署—我对事情的顺序感到困惑 我的容器命令如下:Django 在弹性Beanstalk上部署后运行manage.py命令的正确方法?,django,amazon-web-services,deployment,amazon-elastic-beanstalk,Django,Amazon Web Services,Deployment,Amazon Elastic Beanstalk,我正在将Django应用程序部署到EB—这是我的第一次EB部署—我对事情的顺序感到困惑 我的容器命令如下: container_commands: 01_migrate: command: "django-admin.py migrate" leader_only: true 02_collectstatic: command: "django-admin.py collectstatic --noinput" leader_only: true
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
,它创建了app-v2.zip
。migrate
命令在EB环境中运行,但在app-v2.zip
解包到/var/app/current
之前,在旧代码库(app-v1.zip
)上运行,因此不会应用我的迁移
如果我随后运行另一个eb deploy
,它将创建app-v3.zip
,但将在app-v2.zip
中的代码上运行migrate
。因此,它是可行的,但这意味着每当我想要更改数据模型或静态文件时,我必须运行两次eb deploy
(同样的问题也适用于collectstatic
)
这里有更多的解释和解决方法,但是所有的“deploy Django to EB”教程都像我使用container\u命令所做的那样
正确的方法是什么?您让我担心,但我已经确认eb deploy
确实使用新版本的代码运行命令。在实际发布到服务器之前,它会在暂存区域执行此操作,但在使用正确的版本时会执行此操作
您可以在部署后执行eb logs-a
,并查找eb activity.log
,以查看所有命令的执行情况以及正确的迁移情况
至于流,我不希望将collecstatics作为EB流的一部分调用,因为我使用基于gulp的流将代码直接发布到S3(和CloudFront)中。因此,我只是将迁移作为部署的一部分运行(加上我的应用程序特有的其他内容):
一切正常。你确定吗?我已经使用电子商务一年了,我从未见过你描述的行为。该博客讨论了这样一个事实,即命令在部署之前在临时区域上运行,但是临时区域应该有新的存档。你能详细说明你认为这是怎么发生的吗?
01_migrate:
command: "django-admin.py migrate --noinput"
leader_only: true