我正在关注本教程: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?这样做会解决这个问题吗?那些命令究竟做了什么/为什么它们是必要的?
由于
编辑:
奖金问题:为什么我的帖子会按时间降序显示?新帖子位于页面底部而不是顶部。我怎么能改变这个?
答案 0 :(得分:1)
您的本地开发与已部署项目之间存在差异。
我假设您在本地创建了帖子。因此它们被保存在本地数据库中。本地您使用在设置'django.db.backends.sqlite3'
中定义的基于文件的数据库,这意味着当您运行manage.py syncdb
时,将创建包含所有表的文件。将代码部署到heroku时,代码将被推送到服务器并从此处运行。这可以无处不在,因此无法连接到本地数据库文件。对于您的项目,您还必须在heroku上设置数据库。我建议阅读this article。如果要传输数据,可以创建本地数据库转储并将所有数据加载到heroku数据库。描述了here和here。
另一点,您不能使用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')
之类的内容更改查询集的顺序。所以你以相反的顺序得到所有条目。