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”以应用 他们。
无论我尝试重新运行makemigrations
和migrate
多少次,它似乎仍然无法启动。除了不可能以这种方式在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) 应该与创建模型分开提交吗?