Rails 3 Engine&静态资产

时间:2010-11-24 11:27:21

标签: ruby-on-rails-3 static assets rails-engines

我正在构建一个我作为宝石捆绑的引擎(gmaps4rails)。我在我的rails应用程序的/ public中复制了我的引擎的/ public。

一切都在开发中运行良好但无法在生产中工作:看起来静态资产(我的引擎和我的主应用程序)都找不到。

日志告诉以下内容(只是摘要):

Started GET "/javascripts/application.js?1286294679" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010

ActionController::RoutingError (No route matches "/javascripts/application.js"):


Rendered /Users/me/.rvm/rubies/ree-1.8.7-2010.02/lib/ruby/gems/1.8/gems/actionpack-3.0.3/lib/action_dispatch/middleware/templates/rescues/routing_error.erb within rescues/layout (1.1ms)


Started GET "/stylesheets/gmaps4rails.css?1290554221" for 127.0.0.1 at Wed Nov 24 00:22:20 +0100 2010

ActionController::RoutingError (No route matches "/stylesheets/gmaps4rails.css"):

我做了一些事情:

  1. 在我的应用的production.rb中,我设置了:

    config.serve_static_assets = true

    这解决了问题,但不够优雅,我想将其保持为假并在引擎中添加配置:)

  2. 我没有成功地遵循建议 here

6 个答案:

答案 0 :(得分:7)

出于性能原因,在生产模式下禁用静态资产服务。您的网络服务器应配置为提供这些资产。

如果您使用nginx作为网络服务器,请查看此discussion

答案 1 :(得分:5)

在Rails 3.x中尝试在config / environments / production.rb

中设置它
  

config.serve_static_assets = true

默认情况下,Rails假设您使用的是资产服务器(lightttp,nginx或Apache)

答案 2 :(得分:4)

在您的引擎中,替换:

initializer "static assets" do |app|
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end

使用:

initializer "static assets" do |app|
      app.middleware.insert_before(::ActionDispatch::Static, ::ActionDispatch::Static, "#{root}/public")
end

答案 3 :(得分:2)

您是否尝试将此添加到您的Rails :: Engine类:

initializer "static assets" do |app|
  app.middleware.use ::ActionDispatch::Static, "#{root}/public"
end

这将在您的Gem / public目录中与应用程序在运行时合并。

答案 4 :(得分:1)

我在安装Rails 3.1引擎时遇到了类似的问题。我在舞台和制作中收到空白资产。

我在http://jonswope.com/2010/07/25/rails-3-engines-plugins-and-static-assets/comment-page-1/#comment-87找到了一个解决方案,并将其调整为适合Rails 3.1资产位置:

initializer "static assets" do |app|
  app.middleware.insert_before ::Rack::Lock, ::ActionDispatch::Static, "#{root}/app/assets"
end

我想有一种更优雅的方式,但我今天的努力并没有产生任何实质性的东西。

答案 5 :(得分:0)

我不太了解宝石的包装/制作方式。但是为什么你不能将你的gems公共文件夹中的images / js / css东西复制到apps公共文件夹中?我只是这样做,它对我有用。这不是完成的事吗?