【问题标题】:Heroku and Django Running ServerHeroku 和 Django 运行服务器
【发布时间】:2015-04-10 16:10:55
【问题描述】:

我正在关注本教程:http://tutorial.djangogirls.org/en/domain/README.html

当我做python manage.py runserver 时,它工作正常。当我运行时它也有效

heroku ps:scale web=1

然后

heroku open

python manage.py runserver 显示我的博客文章和我添加的所有内容。但是当我用heroku open 运行服务器时,没有任何帖子,好像数据库丢失了一样。

这是为什么呢?为什么这两个命令会启动同一个网页,但使用不同的帖子/不同的数据库?

这让我想到了我的后续问题:我如何知道何时需要为服务器再次运行 migrate 或 makemigrations?这样做能解决问题吗?这些命令到底有什么作用/为什么需要它们?

谢谢

编辑:

额外问题:为什么我的帖子按时间降序显示?新帖子位于页面底部而不是顶部。我该如何更改?

【问题讨论】:

  • 我们之前已经讨论过。 runserver 正在在您的笔记本电脑上运行。它使用的数据库是在您的笔记本电脑上。当你在 Heroku 中运行时,它有自己的自己的数据库;显然服务器无法访问您笔记本电脑上的数据。

标签: python django heroku


【解决方案1】:

您的本地开发和部署的项目之间存在差异。 我假设您在本地创建了帖子。因此它们被本地保存到您的数据库中。在本地,您使用在设置'django.db.backends.sqlite3' 中定义的基于文件的数据库,这意味着当您运行manage.py syncdb 时,将创建包含所有表的文件。当您将代码部署到 heroku 时,代码会被推送到服务器并从该位置运行。这可能无处不在,因此它无法连接到您的本地数据库文件。对于您的项目,您还必须在 heroku 上设置一个数据库。我建议阅读this article。当您想要传输数据时,您可以在本地创建数据库转储并将所有数据加载到您的 heroku 数据库。描述了herehere

另外一点,您不能使用heroku open 或通过火python manage.py runserver 运行服务器。当您的git push heroku master 完成时,heroku 服务器会自动启动。它使用来自您的 Procfile 的配置。

当你想迁移你的heroku数据库时,你必须运行heroku run python manage.py migrate <app_name>,而不是在heroku服务器上远程完成迁移。每次更改模型并添加带有python manage.py makemigration <app_name> 的迁移文件时,都必须运行此命令。当你这样做时,你必须将你的数据库迁移到本地和远程。这意味着您更改数据库结构以匹配您的模型。请记住,模型只是数据库的抽象(orm)。

我不知道您的项目,但订单是合法的。试着把它想象成行。第一行首先出现。所以最后输入的行在底部。您可以使用.order_by('-id') 之类的内容更改查询集的顺序。所以你以相反的顺序获得所有条目。

【讨论】:

  • 查询集让我很困惑,它们到底是什么?我会把 .order_by('-id') 放在哪里?
  • 想通了,'-id' 和'-published_date' 一样,谢谢
  • 你做类似 Model.objects.all().order_by('-id') 的事情。查询集将数据库中的数据表示为对象。这意味着您可以过滤数据并对其进行创建、更新、删除 (CRUD)。与普通 SQL 相比,它们易于使用。您需要了解架构。模型和查询集 = 数据,视图 = 请求处理等等。也许也可以试试官方 django 教程docs.djangoproject.com/en/1.8/intro
  • 非常感谢,Django 的术语与我使用的其他 MVC 框架略有不同
猜你喜欢
  • 2014-08-26
  • 2016-05-16
  • 2018-08-19
  • 2017-02-15
  • 1970-01-01
  • 2022-01-11
  • 1970-01-01
  • 2019-04-03
  • 2021-02-25
相关资源
最近更新 更多