在部署到Heroku之后,出现了"We're sorry, but something went wrong."的错误提示。

3

我做了一个小应用程序,用户可以登录/注销,创建等等。我使用mySQL作为数据库,在本地环境下一切正常。但是在部署到heroku并迁移数据库之后,heroku版本无法工作。当我跟踪日志时,我得到了以下信息:

2011-10-20T18:48:22+00:00 app[web.1]: Started GET "/" for 83.233.57.240 at 2011-10-20 11:48:22 -0700
2011-10-20T18:48:22+00:00 app[web.1]:   Processing by HomeController#index as HTML
2011-10-20T18:48:22+00:00 app[web.1]: Rendered home/index.html.erb within layouts/application (0.0ms)
2011-10-20T18:48:22+00:00 app[web.1]: Completed 500 Internal Server Error in 2ms
2011-10-20T18:48:22+00:00 app[web.1]: 
2011-10-20T18:48:22+00:00 app[web.1]: ActionView::Template::Error (defaults.js isn't precompiled):
2011-10-20T18:48:22+00:00 app[web.1]:     3:   <head>
2011-10-20T18:48:22+00:00 app[web.1]:     4:     <title><%= content_for?(:title) ? yield(:title) : "Untitled" %></title>
2011-10-20T18:48:22+00:00 app[web.1]:     5:     <%= stylesheet_link_tag "application" %>
2011-10-20T18:48:22+00:00 heroku[router]: GET afternoon-lightning-2154.heroku.com/ dyno=web.1 queue=0 wait=0ms service=7ms status=500 bytes=728
2011-10-20T18:48:22+00:00 app[web.1]:     6:     <%= javascript_include_tag :defaults %>
2011-10-20T18:48:22+00:00 app[web.1]:     7:     <%= csrf_meta_tag %>
2011-10-20T18:48:22+00:00 app[web.1]:     8:     <%= yield(:head) %>
2011-10-20T18:48:22+00:00 app[web.1]:     9:   </head>
2011-10-20T18:48:22+00:00 app[web.1]:   app/views/layouts/application.html.erb:6:in `_app_views_layouts_application_html_erb___2280146998680186378_39052620'
2011-10-20T18:48:22+00:00 app[web.1]: 
2011-10-20T18:48:22+00:00 app[web.1]: 
2011-10-20T18:48:22+00:00 app[web.1]: cache: [GET /] miss

我发现它在某个时候会导致500错误,但我不知道原因。有什么建议吗?先谢谢了!
1个回答

15

请检查你的config/environments/production文件中是否有这个设置

# Fallback to assets pipeline if a precompiled asset is missed
config.assets.compile = true
基本上,你的问题是你的资产没有被自动编译。
更多信息请参见:http://devcenter.heroku.com/articles/rails31_heroku_cedar 编辑:
从Rails 3.1开始,我们将使用 Assets pipeline。这意味着您需要将所有资产(图像、JavaScript、CSS)放在app/assets中。在3.1之前,您需要将它们放在public/**/*中。
在开发模式下,Rails 3.1会自动编译(压缩JS和CSS,有时将图像转换为base64等)所有资产,创建一个小型的、版本化的包。
作为实际例子,在项目中运行bundle exec rake assets:precompile。查看public/中的新文件夹。之后可以安全删除它。
在生产模式下,这并不是自动的。您可以启用自动编译资产或在部署之前手动运行bundle exec rake assets:precompile
更多有关Assets Pipeline的信息请参阅http://guides.rubyonrails.org/asset_pipeline.html
有用的链接:https://github.com/dnagir/guard-rails-assets

美丽的......实际上我已经尝试过一次,但它没有起作用。第二次我尝试时,它确实起作用了。你能告诉我它实际上是做什么的吗?非常感谢。 - Holger Sindbaek
你在开玩笑吧...你还帮我解决了我的CSS问题!它似乎无法识别CSS,但编译有所帮助。我每次做更改时都应该这样做吗?还是只需要一次? - Holger Sindbaek
你的应用程序将使用public / *中的内容。如果它在那里找不到资产,则如果config.assets.compile = true,它将重新编译所有资产。如果该选项为false,则会抛出一个异常,说明它没有找到该资产。因此,是的,每次更改资产时都需要手动重新编译。但是,如果您有config.assets.compile = true,则完全不需要这样做。 - Nerian
另外,请检查您在conf/application.rb中是否设置了config.assets.compile = true - Nerian
1
在部署之前执行 bundle exec rake assets:precompile 命令是有效的。 - Jason Kim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接