静态资产未在Heroku / Thin上提供

时间:2011-08-08 03:28:06

标签: ruby-on-rails-3 heroku thin

我在Heroku上没有提供静态资产(图像和js和样式表)时遇到问题。 在我的本地开发环境中正常工作。

错误看起来像这样:

2011-08-08T02:58:45+00:00 app[web.1]: Started GET "/stylesheets/reset.css" for 98.234.235.21 at 2011-08-07 19:58:45 -0700
2011-08-08T02:58:45+00:00 app[web.1]: 
2011-08-08T02:58:45+00:00 app[web.1]: ActionController::RoutingError (No route matches "/stylesheets/reset.css"):

我正在使用:

  • Ruby 1.9.2
  • Rails 3.0.7
  • Heroku with bamboo-mri-1.9.2 and thin webserver。 (我遵循heroku.com上的默认基本设置说明)

我在google / stackoverflow上进行了搜索并尝试了以下操作但没有运气:

  • 删除config.ru
  • use ActionDispatch::Static, "#{Rails.root}/public"添加到config.ru
  • 在staging.rb
  • 中设置config.serve_static_assets = true

有人可以建议修复吗?我应该使用Cedar而不是Bamboo吗?我应该使用其他东西而不是瘦吗?

谢谢!


修改 正在提供js文件,但图像和样式表不是。 我检查了链接中的路径是否一致。

myapp.heroku.com/stylesheets/reset.css - 失败 myapp.heroku.com/javascripts/jquery.js - 成功

我还尝试设置以下内容:config.action_dispatch.x_sendfile_header = nil。 这与config.serve_static_assets = true同时发生,但注意到无论你如何设置它们,Heroku都会强制执行这些选项。即在启动期间执行以下操作:

-----> Detected Rails is not set to serve static_assets
       Installing rails3_serve_static_assets... done
-----> Configure Rails 3 to disable x-sendfile   
       Installing rails3_disable_x_sendfile... done

2 个答案:

答案 0 :(得分:3)

问题原来是资产文件没有被推送到heroku(我有一个git screwup,而不是heroku问题)。

当我联系他们时,Heroku的支持指出了这一点。他们立即回复了详细的答复,其中还包括以下评论:

  • Heroku gem不需要在Heroku上运行
  • 在Gemfile中指定postgres gem;在本地使用postgres代替sqlite3
  • 进行开发
  • config.ru:不要直接运行调度程序,运行应用程序容器
  • 不要将x_sendfile_header设置为nil,因为Rails 3上没有正确支持(这是Rails 3.1设置)

答案 1 :(得分:0)

我不相信Heroku在staging环境中运行,我认为它正在production环境中运行,这就是为什么你的设置没有被应用。