Heroku:Django Migration 版本未在部署中运行
Posted
技术标签:
【中文标题】Heroku:Django Migration 版本未在部署中运行【英文标题】:Heroku: Django Migration release not running in deployment 【发布时间】:2020-11-19 17:35:31 【问题描述】:我有一个在 Heroku 中运行的 Django 应用程序。在初始部署时,我使用 heroku run
手动迁移了数据库架构。
下次我需要将迁移推送到应用程序时,发布没有任何抱怨。 然而,当我去现场查看它时,我收到了一个编程错误:新列不存在。从未运行过迁移。
这是我的 Procfile:
web: gunicorn APP_NAME.wsgi --log-file -
release: python manage.py migrate
release: python manage.py collectstatic --noinput
worker: celery worker -A APP_NAME -B -E -l info
collectstatic 版本运行成功,但 migrate 版本似乎被忽略或忽略了。当我手动迁移时,它们迁移没有错误。在迁移文件夹中有一个空的__init__.py
文件。
如果有人知道什么可能会阻碍迁移版本的运行,那就太棒了。
【问题讨论】:
【参考方案1】:好的,我想通了。尽管 Heroku 在其文档中似乎暗示 Procfile 中可以有多个发布标签,但这是不正确的。
Procfile 中的最后一个 release
标记优先。
这意味着为了在发布阶段运行多个命令,您必须使用 shell 脚本。
现在,我的 Procfile 看起来像这样:
web: gunicorn APP_NAME.wsgi --log-file -
release: ./release.sh
worker: celery worker -A APP_NAME -B -E -l info
我有一个 release.sh
脚本,看起来像这样:
python manage.py migrate
python manage.py collectstatic --no-input
确保您的 RELEASE.SH
脚本可执行:
在提交之前在终端中运行chmod u+x release.sh
应该可以解决问题。
【讨论】:
【参考方案2】:由于我无法评论 @rchurch4 的答案,所以这里是:如果您在发布时只有几个命令要运行,您可以在 Procfile 中使用以下内容:
release: command1 && command2 && command3 [etc.]
例如
release: python manage.py migrate && python manage.py loaddata foo && python manage.py your_custom_management_command
【讨论】:
以上是关于Heroku:Django Migration 版本未在部署中运行的主要内容,如果未能解决你的问题,请参考以下文章
不使用 Django 的 Python 数据库(用于 Heroku)
[Django][Python]Django重置Migration
[Django][Python]Django重置Migration