Я развертываю приложение Django для EB - мое первое развертывание EB - и я смущен порядком вещей.Правильный способ запуска команд manage.py после развертывания на Elastic Beanstalk?
Моих команды контейнера таковы:
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
, но будет работать migrate
на код в app-v2.zip
. Таким образом, это работает, но это означает, что я должен запускать eb deploy
дважды в любое время, когда хочу изменить либо модели данных, либо статические файлы (эта же проблема относится к collectstatic
).
Существует более объяснение и обходной путь on this blog post и this SO question, но все «развернуть Django ЕВ» учебники делать вещи так, как я сделал это с container_commands
.
Каков правильный путь?
Уверены ли вы? Я использую ЭБ в течение года, и я никогда не видел поведения, которое вы описываете. В блоге рассказывается о том, что команды запускаются на промежуточной области перед развертыванием, но в этой промежуточной области должен быть ваш новый архив. Можете ли вы дать более подробную информацию о том, как вы думаете, что это происходит? – dkarchmer