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

Posted

技术标签:

【中文标题】如何使用 Python 迁移将 Heroku Django 应用程序的新模型表添加到远程 Heroku Postgres?【英文标题】:How to add a Heroku Django app's new model table to the remote Heroku Postgres with Python migrate? 【发布时间】:2016-12-19 23:30:00 【问题描述】:

在成功完成a Heroku Python app with a Postgres db 上的教程后,我在 Heroku 应用程序上创建了一个新模型,基于现有代码,通过复制和粘贴现有模型及其表的函数和文件。 但实际上让 Heroku 在 Postgres 上远程创建表时遇到了麻烦。经过反复试验,我在下面找到了答案。

设置:Heroku Python 在本地和远程运行,Heroku Postgres 仅在远程运行。

【问题讨论】:

【参考方案1】:

我想通过运行本教程中使用的heroku run python manage.py migrate,在我的远程 Heroku Postgres 数据库上实际创建我的新表。但它并没有立即奏效。我需要做的是设置几个 Python 文件,然后在最后运行该命令。

如果您也编辑模型(例如添加新字段),这也有效。

我添加的所有文件都在基于this tutorial的Heroku tutorial's code中

这正是我所做的:

    在hello/models.py,添加

    class Mytable(models.Model):
        when = models.DateTimeField('date created', auto_now_add=True)
    

    通过在我的 Mac 终端(已登录 Heroku 和 virtualenv)上运行以下命令,让 Python 在我的本地 hello/migrations 中生成 0002_mytable.py 文件:

    python manage.py makemigrations hello
    

    我收到了这样的回复:

    Migrations for 'hello':
      0002_mytable.py:
        - Create model Mytable
    

    将这个新的迁移文件添加到我的远程 Heroku

    git add hello/migrations/0002_mytable.py
    git commit -am "added new migration file"
    git push heroku master
    

    让 Heroku 在远程 Heroku Postgres 上远程创建表

    heroku run python manage.py migrate
    

    你应该看到

    Running python manage.py migrate on ⬢ your-heroku-url... up, run.1699
    Operations to perform:
      Apply all migrations: admin, contenttypes, hello, sessions, auth
    Running migrations:
      Rendering model states... DONE
      Applying hello.0002_mytable... OK
    

【讨论】:

【参考方案2】:

确保您已在本地进行数据库迁移

python manage.py makemigrations
python manage.py migrate
git add .
git commit -m "Database migrations"

然后在您的 Procfile 中添加以下行作为第一行

release: python manage.py migrate

再次在 heroku 上部署此更改

git add Procfile
git commit -m "Add Release Phase to Procfile"
git push heroku master

完成....

【讨论】:

以上是关于如何使用 Python 迁移将 Heroku Django 应用程序的新模型表添加到远程 Heroku Postgres?的主要内容,如果未能解决你的问题,请参考以下文章

在 Heroku 上部署时出现 Django 1.7 迁移错误

Heroku/Django:没有名为 dj_database_url 的模块

Django 迁移在 Heroku 中失败

python 无法打开文件'manage.py'-“heroku 运行 python manage.py 迁移命令输入”

django makemigrations 和 heroku 服务器上的迁移不创建表

将 Django 开发数据库 (.sql3) 迁移到 Heroku