【问题标题】:Applying Django migrations in a non-interactive environment在非交互式环境中应用 Django 迁移
【发布时间】:2016-05-16 21:27:43
【问题描述】:

我在 Django 中重命名了一些模型,并使用 python manage.py makemigrations 创建了迁移。

使用python manage.py migrate 时,我收到以下消息提示

通过外键与这些内容类型相关的任何对象也将 被删除。您确定要删除这些内容类型吗? 如果您不确定,请回答“否”。

输入“yes”继续,或输入“no”取消:

在我的本地机器上,我可以简单地输入“是”。然而, 我的应用程序部署在 Heroku 上,并且我已将迁移配置为在构建应用程序时自动运行。我使用一个看起来像这样的post_compile 文件来实现这一点:

# Run Django migrations
./manage.py migrate

# Compress static assets
./manage.py compress

迁移是否会因为不在交互式 shell 中而无法完成(因此无法对这个问题回答“是”)?如果是这样,如何避免这个问题?

【问题讨论】:

  • 一个选项是在heroku下运行bash,然后在其交互环境下迁移:heroku run your-app-name bash
  • @kaveh 感谢您的提示。我希望让它全部自动化,但那将是一个很好的后备。

标签: python django heroku database-migration


【解决方案1】:

您可以使用migrate 命令的--noinput 命令行参数:

./manage.py migrate --noinput

这会抑制提示,但不会删除过时的内容类型(即,它的工作原理就像您在提示时回答了No)。见Django ticket #25036

另一种选择是使用 Unix 命令yes(虽然我不确定 Heroku 是否默认启用它):

yes "yes" | ./manage.py migrate

【讨论】:

    猜你喜欢
    • 2016-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-08
    • 2017-11-24
    • 1970-01-01
    • 2016-02-17
    • 2021-12-08
    相关资源
    最近更新 更多