【问题标题】:Categories and subcategories do not seem to exist in database on Heroku serverHeroku 服务器上的数据库中似乎不存在类别和子类别
【发布时间】:2019-07-29 02:54:05
【问题描述】:

我已将我的 Rails 应用程序部署到 Heroku,但类别和子类别不再存在。

我的主页上显示了类别和子类别,但部署后类别和子类别不显示。当我在本地运行应用程序时,会显示类别和子类别。

在我尝试将我的应用部署到 Heroku 之前,我收到了与类别和子类别相关的错误。为了解决我之前的错误,我将类别和子类别放在 if 语句中:

<% if Category.exists?(id) %>
<% end %>

对我来说,问题似乎是这些类别存在于我的本地服务器上的数据库中,但不存在于 Heroku 服务器上。

【问题讨论】:

  • 当您在这里提问时,请注意只分享相关代码。您问题中的大多数代码完全无关紧要。见How to Ask。我们想要一个minimal reproducible example,强调minimal
  • 克里斯回答了你的问题,但我也会给出一些建议。在您的类别控制器中,您没有对查询进行排序,同时您正在按索引提取记录。将.order(:id) 添加到Category.all。现在,您依赖于数据库以您期望的顺序返回记录的事实,但您并没有要求以任何特定方式对它们进行排序。这是一场赌博,无法保证您的无序查询将继续按照您期望的顺序返回结果(尤其是当记录从磁盘插入和删除时,即使在其他表中也是如此)。
  • 欢迎来到 Stackoverflow,我稍微清理了你的问题,正如@Chris 提到的那样,大部分问题并不是真正必要的。祝你好运。

标签: ruby-on-rails heroku


【解决方案1】:

对我来说,问题似乎是这些类别存在于我的本地服务器上的数据库中,但不存在于 Heroku 服务器上。

它应该是这样工作的。

您的本地数据库和 Heroku 数据库是完全独立的。您需要分别迁移它们(例如rails db:migrateheroku run rails db:migrate),并且需要分别填充它们。您的数据不会神奇地将自身复制到 Heroku。

如果您想将所有本地数据复制到 Heroku 数据库,您可以使用 heroku pg:backups restore 之类的方法来完成,但这需要 PostgreSQL 备份。看起来你在本地使用 SQLite。

另一个选项是dump your local data to a serialized format like YAML and load that data into your remote database

但这不应该是你一直做的事情。当您在多个位置更新数据时,您很容易遇到数据问题(例如重复的 ID)。接受您的数据库是独立的。应用程序的每个副本都有不同的数据。这其实是件好事。

作为一般规则,我强烈建议您在本地使用与生产环境中相同的数据库服务器。 PostgreSQL 和 SQLite 不是相互替代的。您不希望在将代码部署到生产环境时发现问题。

【讨论】:

  • 伙计,关于在所有环境中使用相同的数据库服务器这一点非常正确。尽管 ActiveRecord 试图通用,但数据库之间仍然存在细微的(而不是那么细微的)差异。我希望更多的人知道这一点。
  • 非常感谢您的回答,我通过运行heroku run rails db:seed解决了我的问题。
猜你喜欢
  • 2019-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-29
  • 2015-10-15
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
相关资源
最近更新 更多