2010-11-24 80 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 

我想有一種更優雅的方式,但今天我的努力沒有產生任何實質性的。