Heroku和Django运行服务器

时间:2015-04-10 07:28:33

标签: python django heroku

我正在关注本教程: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?这样做会解决这个问题吗?那些命令究竟做了什么/为什么它们是必要的?

由于

编辑:

奖金问题:为什么我的帖子会按时间降序显示?新帖子位于页面底部而不是顶部。我怎么能改变这个?

1 个答案:

答案 0 :(得分: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')之类的内容更改查询集的顺序。所以你以相反的顺序得到所有条目。