【发布时间】: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。它似乎有效 - 没有明显的问题,但是当我尝试实际打开应用程序(即浏览网站)时,我得到了臭名昭著的“我们很抱歉,但出了点问题”。到目前为止,这是我尝试过的:
- Heroku 状态:生产或开发中没有已知问题
- Heroku 运行 rake db:migrate
- Heroku pg:reset(后跟 #2)
- 检查“gem 'pg'”是否在 gemfile 中用于生产(尽管我仍然有 sqlite3 用于开发)
- 我在 /config/production.rb 中将“config.assets.compile = false”切换为“true”
- 我使用的是 Rails 3.2.1,所以我检查了我在 cedar 堆栈上
- 我还在“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 时,我确实发现了两个问题:
- 我没有在 gemfile 中明确声明我的 ruby 版本(现已完成);并且,
- 资产未预编译的问题 - “nil:NilClass 的未定义方法 '[]'”。我尝试按照 Heroku 的建议 (https://devcenter.heroku.com/articles/rails-asset-pipeline) 从命令行手动编译资产,但没有任何乐趣——同样的 nil:NilClass 错误。
相关的,还是一个全新的问题?
更新 2: 针对一些cmets/问题:
- culix,我已经尝试过 DevCenter(请参阅更新 1 中的 #2)。
- 日志级别设置为:debug,但也许我做错了?我边走边学——当它无法加载时,如何从生产中获取日志信息?
- 关于 NilClass 应用程序正在开发中,因此它必须是需要在生产中加载的东西,例如资产还是数据库?我已经更新了上面生成的错误——我之前可能已经切断了一些关键信息。我看起来像是在 application.css 中,而其他一些帖子似乎表明 Rails 3.2 中的引导程序可能会成为生产问题,所以欢迎提出任何建议?
- 我尝试过 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