2010-11-24 75 views
6

我正在构建一个引擎,我将它捆绑为一个gem(gmaps4rails)。我将我的引擎的/ public公开在我的rails应用程序的/ public中。Rails 3引擎和静态资产

一切工作正常的发展,但无法在生产中工作:它显示静态资产(我的引擎&我的主要应用程序)没有找到。

日志跟以下(只是一个抽象的):

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

    这解决了问题,但不够优雅,我想要ke ep它假和在引擎中添加配置:)

  2. 我跟着 here建议没有成功。

回答

7

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

看看这个discussion如果你正在使用nginx作为网络服务器。

1

你有没有尝试添加这对于Rails :: Engine类:

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

这会在你的宝石的/ public目录合并在运行时的应用程序。

+0

谢谢您的回答,我没有尝试,但它并没有任何区别:) – apneadiving 2010-11-24 17:36:53

5

在Rails 3.x中尝试设置这个在配置/环境/ production.rb

config.serve_static_assets =真

默认的Rails假定你正在使用的资产服务器(lightttp ,nginx或Apache)

0

我对方式不太了解,宝石是打包/制作的。但为什么你不能复制你的宝石公共文件夹的图像/ js/css的东西到应用程序的公用文件夹?我只是这样做,它为我工作。这是不是做过的事情?

+2

这意味着大家谁使用你的宝石具有手动公共文件到他们的主应用程序复制......不,它不是做过的事情! – 2012-02-22 20:40:11

3

在你的引擎,替换:

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 
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 

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