2012-03-14 102 views
17

在生產模式下,rails似乎無法從資產管道中找到任何預編譯的資產。爲什麼Rails不能找到我的資產?

我在CentOS上的RVM內部使用rails 3.2.0和ruby 1.9.3。沒有額外的網絡服務器與此應用程序結合運行。該應用程序最近才更新爲使用資產管道,因爲它最初是一個rails 3.0應用程序。

運行

rake assets:clean 
rake assets:precompile 

後,我看到在公共/資產散列的內容,如我期望的那樣。文件末尾的哈希符合我在頁面源代碼中看到的哈希。

然而在運行時,這是我看到每個資產Rails的嘗試投放:

Started GET "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" for 75.149.58.169 at 2012-03-14 11:42:43 -0700 

ActionController::RoutingError (No route matches [GET] "/assets/application-892c6227e631daf9a8e041b1d4d002ec.css"): 

我不是指每個資產安置在該文件夾;資產的所有引用看起來像這些:在production.rb

//css: 
.class { 
    background: url(asset.png) no-repeat; 
} 

//erb: 
<%= image_tag "asset.png" %> 
<%= link_to "page", :class => "class" %> 

資產管道相關的設置:

config.serve_static_assets = false 
config.assets.enabled = true 
config.assets.compress = true 
config.assets.debug = false 
config.assets.compile = false 
config.assets.digest = true 

最後,從配置/ application.rb中資產設置:

config.assets.enabled = true 
config.assets.version = '1.0' 

啓動rails server進程的用戶對公共/資產具有讀取,寫入和執行權限,所以我不認爲這是權限問題。我錯過了配置步驟嗎?

編輯

我注意到,有沒有錯誤,指出資產不預編譯,所以我試圖通過附加「/assets/application-892c6227e631daf9a8e041b1d4d002ec.css」每次從網頁訪問樣式表主機路徑末尾:

http://www.myapp.com"/assets/application-892c6227e631daf9a8e041b1d4d002ec.css" 

這樣工作並打開了樣式表。

+0

相關/重複:http://stackoverflow.com/questions/5760661/rails-favicon-ico-not-found – 2014-03-04 09:17:42

回答

26

這個問題的進一步研究產生這種SO文章:

application.css not being served as an asset

看來

config.serve_static_assets = false 

是不正確的設置,只要我的Rails應用程序是不是背後Apache或Nginx的

運行
+0

我被這個抓住了。通常使用Apache,但在這種情況下通過IIS使用Thin。謝謝! – kim3er 2012-09-24 09:08:00

4

我有同樣的問題,但我注意到你的樣式表指向非指紋,非緩存文件的版本。如果您正在使用資產管道,爲了利用它,您需要使用指向文件的指紋緩存版本的幫助程序。要做到這一點,你需要將erb嵌入到你的css文件中,或者使用sass。

錯誤:

.class { 
    background: url(asset.png) no-repeat; 
} 

正確的(使用SASS):

.class 
    background: image-url('asset.png') no-repeat 

欲瞭解更多信息,請看這裏:http://guides.rubyonrails.org/asset_pipeline.html#coding-links-to-assets

如果你不關心的性能問題,你可以避免使用非緩存版本,直到升級到Rails 4或Rails 3.2.16,因爲這些版本引入了迫使您使用資產管道的重大更改(並且它相應的語法)。如果您不使用新的語法,則非緩存版本在生產中根本不起作用。

+0

嘿,謝謝!但是,自從發佈這個問題以來,我們最終將資產遷移到CDN,但我會記住這將用於未來的Rails項目! – BrMcMullin 2013-07-15 16:48:57

+0

不客氣! :d – 2013-07-15 18:04:34