【问题标题】:Heroku & Rails 3.2 We're sorry but something went wrongHeroku & Rails 3.2 很抱歉,出了点问题
【发布时间】:2013-08-12 17:05:54
【问题描述】:

我今天过得很糟糕:#rails-noob #githubsucks #herokufail #abouttosmashmylaptop。好的,我感觉好多了。

我使用 Rails 3.2.12/ruby 1.9.3 创建了一个应用程序。它在本地工作 - 完全没有问题 - 我已经使用 github 在本地保存,尽管我遇到了一些 github.com 问题(请参阅这个问题 Git duplication - receive pack not found)。所以我尝试在本地部署到 Heroku,即不通过 github.com。它似乎有效 - 没有明显的问题,但是当我尝试实际打开应用程序(即浏览网站)时,我得到了臭名昭著的“我们很抱歉,但出了点问题”。到目前为止,这是我尝试过的:

  1. Heroku 状态:生产或开发中没有已知问题
  2. Heroku 运行 rake db:migrate
  3. Heroku pg:reset(后跟 #2)
  4. 检查“gem 'pg'”是否在 gemfile 中用于生产(尽管我仍然有 sqlite3 用于开发)
  5. 我在 /config/production.rb 中将“config.assets.compile = false”切换为“true”
  6. 我使用的是 Rails 3.2.1,所以我检查了我在 cedar 堆栈上
  7. 我还在“application.rb”文件中启用了资产——“config.assets.enabled = true”

我已经多次检查 Heroku 日志等,没有任何问题 - 一切看起来都很好 - 除了出现 500 错误。从我读到的内容看来,以前(Rails 4.0 之前)可能是一个 Heroku 问题导致了这些错误,但我似乎找不到任何一个参考。它正在修复,或者 b。如何解决它。

建议?

更新:根据 culix 的建议,我尝试打开日志级别,但它似乎并没有改变日志输出(时间码已删除)。

app[web.1]:在 2013-08-11 07:30:40 +0000 开始 GET "/" for 124.148.153.24

app[web.1]:StaticPagesController#splash 作为 HTML 处理

app[web.1]:在布局/应用程序中渲染 static_pages/splash.html.erb (2.6ms)

heroku[路由器]: at=info method=GET path=/ host=genericappname.herokuapp.com fwd="124.148.153.24" dyno=web.1 connect=2ms service=1470ms status=500 bytes=643

app[web.1]:在 1459 毫秒内完成 500 内部服务器错误 app[web.1]: ActionView::Template::Error (nil:NilClass 的未定义方法 `[]'

app[web.1]:(在 /app/app/assets/stylesheets/application.css 中):

应用[web.1]:2:

应用[web.1]:3:

app[web.1]: 4:

app[web.1]: 5: "all" %>

app[web.1]: 6:

app[web.1]: 7:

app[web.1]: 8:

app[web.1]: app/v

但是,当我将更改推送回 Heroku 时,我确实发现了两个问题:

  1. 我没有在 gemfile 中明确声明我的 ruby​​ 版本(现已完成);并且,
  2. 资产未预编译的问题 - “nil:NilClass 的未定义方法 '[]'”。我尝试按照 Heroku 的建议 (https://devcenter.heroku.com/articles/rails-asset-pipeline) 从命令行手动编译资产,但没有任何乐趣——同样的 nil:NilClass 错误。

相关的,还是一个全新的问题?

更新 2: 针对一些cmets/问题:

  1. culix,我已经尝试过 DevCenter(请参阅更新 1 中的 #2)。
  2. 日志级别设置为:debug,但也许我做错了?我边走边学——当它无法加载时,如何从生产中获取日志信息?
  3. 关于 NilClass 应用程序正在开发中,因此它必须是需要在生产中加载的东西,例如资产还是数据库?我已经更新了上面生成的错误——我之前可能已经切断了一些关键信息。我看起来像是在 application.css 中,而其他一些帖子似乎表明 Rails 3.2 中的引导程序可能会成为生产问题,所以欢迎提出任何建议?
  4. 我尝试过 slug 和本地编译 - 都不起作用。

我正在为缺乏 Heroku 错误信息来指导我而苦苦挣扎,因此也欢迎这方面的指导。

更新 3: 运行 'run rake assets:precompile' 后,我收到一大堆弃用警告,大致如下:

您在 vendor/plugins 中有 Rails 2.3 风格的插件! Rails 4.0 将删除对这些插件的支持。将它们移出并将它们捆绑到您的 gemfile 中。

但我的供应商/插件文件夹是空的?

我还运行了“rake assets:precompile --trace”(我学到了一个新命令!)并在错误发生的地方得到以下信息:

** 执行 assets:precompile:primary

rake 中止!

/app/app/assets/stylesheets/application.css 已被要求

/app/vendor/bundle/ruby/1.9.1/gems/sprockets-2.2.2/lib/sprockets/base.rb:267:in `circular_call_protection'

【问题讨论】:

  • “当我尝试实际打开应用程序时” - 你的意思是“当我浏览网站时”?
  • 您可以暂时为您的应用程序打开记录器吗?尝试将 log level 转换为 :info 或 :debug 并查看是否打印了更多信息。最好逐行查看程序中发生的情况。
  • 感谢 culix - 没有修复,但我已经更新了帖子。
  • 我曾经遇到过这个问题,这个修复对我有用。在您的本地服务器上运行 rake assets:precompile RAILS_ENV=production 然后将其上传回 heroku 并查看它是否有效。查看您的日志,您是否还可以列出您尝试加载的视图页面的内容?
  • Althaf,我试过了(见更新后的#2)——它仍然吐出一个 nilclass 错误。

标签: ruby-on-rails heroku


【解决方案1】:

好的,回答我自己的问题,以防其他人遇到类似问题。最终,我遇到了与资产管道相关的几个问题。根据这个问题的答案 (bootstrap-sass: Undefined variable: "$baseLineHeight"),在 application.rb 文件中的某处,我会在 config.assets.precompile += %w( various file extensions) 行中放入一些通配符运算符 (*)。一旦我删除了这些,我在开发中再次预编译资产($ RAILS_ENV=development rake assets:precompile),然后推送到 git,然后推送到 heroku。

在此过程中,我还遇到了来自 Webrick 的大量警告/错误的问题 - 我通过在我的 gemfile 中指定 Webrick 版本解决了这个问题:

group :development do
   gem 'webrick', '~> 1.3.1'
end

如果您像我一样不熟悉资产和部署,那么绝对值得阅读资产管道的 RoR (http://guides.rubyonrails.org/asset_pipeline.html) 和 Heroku (https://devcenter.heroku.com/articles/rails-asset-pipeline) 指南,以及观看 Ryan Bate 的截屏视频 #278 和 # 341.

【讨论】:

  • 嘿,我真的很高兴你解决了这个问题!恭喜你,干得好:)
【解决方案2】:

为什么你认为资产中的错误?

你有 ActionView::Template::Error,尝试调试它,你在 nil 对象上调用一个数组或其他类似的东西。

附:你通过迁移了吗?

heroku run rake db:migrate

【讨论】:

  • Extazytas,根据第 2 项。在原始帖子中,我尝试过迁移 - 没有问题。根据我对 Rails 的(初步)理解,在布局/应用程序文件中调用的应用程序样式表等是否保存在资产中?这是模板错误发生的地方,因此它可能是资产错误?还是我误解了 ActionView::Template::Error?
  • 您可以尝试将此行添加到您的 config/environments/production.rb: config.assets.compile = true 但我认为模板错误在大多数情况下是逻辑错误 - 它在您的本地机器上是否正确工作?如果是,请提供命令输出全文heroku logs
猜你喜欢
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 2013-02-24
  • 2012-07-29
相关资源
最近更新 更多