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

Posted

技术标签:

【中文标题】django makemigrations 和 heroku 服务器上的迁移不创建表【英文标题】:django makemigrations and migrate on heroku server don't create tables 【发布时间】:2016-11-14 18:53:31 【问题描述】:

Python 2.7 版 Django 版本 1.9.7

我在 heroku 上创建了一个 Django 应用程序。我无法将 heroku 服务器正确连接到 migrate。过去我在本地完成了所有makemigrations,然后将它们推送到服务器。它过去曾奏效。现在我想我会选择在服务器端进行所有迁移,因为我根本没有在本地运行这个应用程序。

我刚刚在models.py 中为应用“main”创建了一个新模型:

from __future__ import unicode_literals

from django.db import models

class InstagramPhotos(models.Model):
    imageId = models.IntegerField()
    userId = models.IntegerField()
    likes = models.IntegerField()
    captionText = models.CharField(max_length=200)
    image = models.ImageField()

将更改推送到服务器后,我运行了它,输出如下:

heroku run python manage.py makemigrations main

在 ⬢ 上运行 python manage.py makemigrations main glacial-beach-50253... up, run.8354 'main' 的迁移:0001_initial.py: - 创建模型 InstagramPhotos

看起来不错吧?然后我尝试migrate,正如你所知,它实际上会在数据库中创建表:

heroku run python manage.py migrate

在 ⬢ glacial-beach-50253... 上运行 python manage.py migrate, run.7556 要执行的操作:应用所有迁移:auth, contenttypes, admin, sessions 运行迁移:没有迁移到 应用。 您的模型具有尚未反映在 迁移,因此不会应用。运行“manage.py makemigrations” 进行新的迁移,然后重新运行“manage.py migrate”以应用 他们。

无论我尝试重新运行makemigrationsmigrate 多少次,它似乎仍然无法启动。除了不可能以这种方式在heroku服务器上操作之外,不知道为什么会发生这种情况?我肯定需要在本地做makemigrations 并推送吗?

仅供参考,我只是在settings.py 中定义了默认的 sqlite3 数据库。

【问题讨论】:

不要在 Heroku 上运行 makemigrations。在本地执行,提交结果并推送,然后在 Heroku 上运行 migrate。 谢谢,我还不能这样做,因为它希望我在本地进行迁移,而不需要更新我的所有依赖项。我猜想使用新版本的 Django,他们需要 Pillow,还没有想到我会尝试在安装了依赖项的服务器上执行所有这些操作,当然没问题。我现在明白了。 如果您可以在本地运行应用程序,您将如何进行任何开发? 是的,我解决了依赖问题。不是我真的做不到,而是我还没有做到。从我的角度来看,我可以在服务器上运行迁移似乎是合理的。不知道为什么它仍然无法正常工作,但是可以。我不在本地服务器上运行它的原因是我正在使用一个 3rd 方 API,它重定向到一个公共 URL 进行身份验证,所以这在我的本地机器上实际上不起作用。但无论如何,谢谢你,我只是在本地进行了迁移并推动了他们。然后迁移在服务器上运行。 @丹尼尔罗斯曼 @jeffery_the_wind ***.com/questions/65739543/… 你能回答类似的问题吗? 【参考方案1】:

我在部署到 Heroku 时遇到了两次相同的错误。在列出 app 目录下的文件时,我发现 db.sqlite3 文件丢失,这是 django 创建 sql 表所必需的。虽然它会在本地自动创建文件,但在运行 migrate 命令时并没有在 heroku 上创建它。

这里有两个选项:

    在你的 app 目录下的 heroku 上创建 db.sqlite3 文件 在本地运行“python manage.py migrate”创建db.sqlite3并推送到 heroku 回购

【讨论】:

【参考方案2】:
    在本地运行这些命令

python manage.py makemigrations,,, Python manage.py migrate

2.提交您的代码

3.push给heroku master

    运行heroku run python manage.py makemigrations,,,, heroku run python manage.py migrate

你的问题应该解决了

【讨论】:

【参考方案3】:

我也遇到过类似的问题。

我只是 ssh 进入 heroku dyno: heroku run bash(来自您的 heroku 应用程序文件夹 ofc)

如果需要,请使用 createsuperuser 运行所有迁移和 makemigration 命令。 适用于我的 sqlite 和 postgre。

【讨论】:

是的,自从发帖以来,我对如何使用 heroku 有了更好的了解。你永远不需要在 heroku 服务器上makemigrations。您应该始终在本地 makemigrations 然后推送到服务器。你应该只需要在服务器上migrate 谢谢!我没有意识到 heroku 命令在每个测功机中都持续存在 @Dishant Chavra ***.com/questions/65739543/… 你能回答类似的问题吗? 嗨,我遇到了类似的问题,但我无法在本地运行 makemigrations,因为我使用的是 heroku postgres 数据库,它显示“用户没有 CONNECT 权限”。关于什么可以提供帮助的任何想法? 这通常意味着您没有指定数据库名称。

以上是关于django makemigrations 和 heroku 服务器上的迁移不创建表的主要内容,如果未能解决你的问题,请参考以下文章

Django Makemigrations 和 Migrate 不断重复

makemigrations 和升级到 Django 1.7 的问题

Django Migration (makemigrations) 应该与创建模型分开提交吗?

django heroku makemigrations 忽略模型的变化

Django:啥时候运行makemigrations?

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