Heroku 不会在 Django 中迁移模型

Posted

技术标签:

【中文标题】Heroku 不会在 Django 中迁移模型【英文标题】:Heroku doesn't migrate models in Django 【发布时间】:2021-07-19 04:35:45 【问题描述】:

我在 Heroku 上部署了一个 Django 应用程序。 我正在尝试使用 Heroku Postgres 插件将数据库从 mysql 切换到 Postgres

我删除了所有迁移并运行 manage.py makemigrations 以获得干净的迁移日志。 然后我提交并推送。

如果我在本地机器上运行 manage.py migrate,我会得到: “经理”的迁移:

  manager/migrations/0001_initial.py
    - Create model AbiMapping
    - Create model MissingContracts
    - Create model TempEmailAccounts
    - Create model UnsupportedMetaContracts
    - Create model Users
    - Create model Passwords
    - Create model ContractMapping
    - Create model Tokens

我将此命令添加到 Procfile,以便在我推送到 Heroku 时运行迁移:

release: python3 manage.py migrate

当推送到 Heroku 时,迁移调用有效,但它不会迁移我在应用中拥有的模型:

remote: Verifying deploy... done.
remote: Running release command...
remote: 
remote: Operations to perform:
remote:   Apply all migrations: admin, auth, contenttypes, manager, sessions
remote: Running migrations:
remote:   No migrations to apply.

这就是我设置数据库的方式 settings.py:

.env 在本地机器上设置环境变量。在 heroku 数据库上,环境变量是从环境中加载的,因为没有 .env

dotenv_file = os.path.join(BASE_DIR, ".env")
if os.path.isfile(dotenv_file):
    dotenv.load_dotenv(dotenv_file)

设置数据库:

DATABASES = 
DATABASES['default'] = dj_database_url.config(conn_max_age=600)

django_on_heroku.settings(locals())

似乎数据库确实存在于heroku中:

$ heroku config
=== frame-zero Config Vars
DATABASE_URL: postgres://<details of my database address and credentials>

谢谢

【问题讨论】:

【参考方案1】:

已经解决了here。诀窍是首先在 Heroku Dyno 上运行 bash。首先运行Heroku run bash,然后在bash窗口内运行Python manage.py makemigrations,然后Python manage.py migrate

【讨论】:

以上是关于Heroku 不会在 Django 中迁移模型的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 上的迁移问题

如何使用 Python 迁移将 Heroku Django 应用程序的新模型表添加到远程 Heroku Postgres?

在 Heroku 上,在实例已经使用更改的模型代码重新启动后,Django syncdb / South 迁移是不是存在危险?

将数据库从本地 django 迁移到 heroku

如何在heroku中应用特定的django数据库迁移?

Django 迁移在 Heroku 中失败