【问题标题】:Issue(s) Deploying Rails app (SQLite3) to Heroku (PostgreSQL)将 Rails 应用程序 (SQLite3) 部署到 Heroku (PostgreSQL) 的问题
【发布时间】:2012-06-22 13:36:46
【问题描述】:

我看到很多关于部署到 Heroku 的问题的帖子,但我无法找到适合我的案例的解决方案。任何意见将不胜感激。

我有一个在本地运行良好的博客应用程序。但是,当我部署到 Heroku 时,我正在返回“对不起,但出了点问题”。

我拥有的宝石是:

group :development do
  gem 'sqlite3', '1.3.5'
end

group :production do
  gem 'pg', '0.12.2'
end

我采取的步骤是:

git add.
git commit -am "latest update"
git push
git push heroku
rake db:migrate
heroku run rake db:migrate

我的 SQLite3 数据库迁移得很好,因为我可以通过 rails 控制台找到我最新的博客条目 (Blog.find(21))。 但是,数据似乎没有迁移到 Heroku 数据库,因为 Heroku 控制台返回

"ActiveRecord::RecordNotFound: Couldn't find Blog with id=21."

此外,“heroku 日志”发现:

Completed 500 Internal Server Error in 50ms
NoMethod Error (undefined method 'blogs' for nil:NilClass):
  app/controllers/static_pages_controller.rb:8:in 'home'

这是否意味着我的 static_pages_controller 可能存在问题,还是因为数据库未正确迁移而返回错误?

下面是我的 static_pages 控制器,它在我的本地服务器上运行良好。

class StaticPagesController < ApplicationController
  def home
    if signed_in?
      @blog = current_editor.blogs.build
    end

    @editor = Editor.first
    @blogs = @editor.blogs.paginate(page: params[:page])
  end
end

注意:我在上面使用 Editor.first,因为我(即 editor_id:1)将是我博客的唯一编辑。我刚刚创建了一个编辑器模型来存储密码摘要。

那么,为什么我的应用程序没有部署在 Heroku 上?

任何反馈都将不胜感激。另外,如果您需要查看其他文件,请告诉我,我会附上。

非常感谢!

【问题讨论】:

  • 你能确认你是从正确的本地数据库推送数据吗? IE。确保你没有像一个空的生产数据库或其他东西一样推送到 Heroku?也许数据推送的输出会有用?
  • 谢谢 SizzlePants。似乎这就是问题所在。但是,我仍然不确定为什么我会收到“我很抱歉,但出了点问题”的消息,即使数据库是空的。只要正确迁移列,Heroku 部署是否应该工作(尽管站点为空)?
  • Heroku 确实可以解决这个问题。我希望您的视图/代码可能会进行假设对象的方法应该可用的调用....但实际上并不是因为有任何数据。一个例子是,如果你有一些你希望是字符串的东西,然后确实喜欢 my_str.captialize ...如果 my_str 是一个 nil 对象或者甚至不是一个字符串...你会得到一个错误。
  • 啊,我明白了。那讲得通。谢谢!

标签: ruby-on-rails sqlite postgresql heroku


【解决方案1】:

运行db:migrate 仅运行数据库迁移,它不会将任何数据从您的开发环境复制到 Heroku。您应该使用 heroku db:push 将数据从本地环境推送到 Heroku:

导入:推送到 Heroku

如果您希望将现有数据库转移到 Heroku,请使用 heroku db:push。例如,您可能想要导入您在本地开发中一直使用的 SQLite 数据库或您已在另一台主机上部署的 MySQL 数据库。

这听起来像是您想要做的,因此请尝试运行 heroku db:push

【讨论】:

  • 你就是男人。我不知道你是怎么回答这么多问题的……这么快。这很可能是正确答案。
  • 谢谢 mu 太短了。我运行 gem install taps,然后运行 ​​heroku db:push,但出现错误。 “HTTP CODE:500。点击服务器错误:PGError:错误:时区位移超出范围:“2012-06-06 12:00:00.000000+5894604000。”我看到这是从 config/database.yml 推送的。我只是注意到我的 database.yml 文件说,“生产:适配器:sqlite,数据库:db/production.sqlite3,池:5,超时:5000”。我想我应该将这些更改为 postgresql?如果是这样,我是否需要更改池和超时数据?
  • @umezo:您如何在 SQLite 中获得 +5894604000 时区?这没有多大意义。如果您通过sqlite3 CLI 工具访问时间戳,它们会是什么样子?
  • 我不确定我是如何结束这个时区的... Time.now on rails 控制台返回 => 2012-06-22 02:59:03 -400。这是有道理的,因为我之前将时间设置为东海岸时间。
  • @umezo:看看这里,看起来和你遇到的问题一样:stackoverflow.com/questions/8151571/…
猜你喜欢
  • 1970-01-01
  • 2012-10-12
  • 2011-10-03
  • 1970-01-01
  • 2016-08-27
  • 2018-09-10
  • 1970-01-01
  • 2015-12-25
  • 2019-04-20
相关资源
最近更新 更多