2013-01-25 154 views

回答

21

在生產env中,Rails將不負責提供靜態資產。因此,你正在得到這個錯誤。

config.serve_static_assets = false 

可以設置爲真正

或試試這個

rake assets:precompile 

這是通過在配置/環境/ production.rb此設置在您的應用程序控制

命令(編譯和複製應用程序/資產中的圖像,css和js到public /。

+1

注意*您應該確保這是在生產中設置的,而不是application.rb。剛剛給我造成了一個小時的頭痛。 –

+3

Rails 4中的'config.serve_static_files' – rendon

+1

'config.public_file_server.enabled = true'在Rails 5中。建議僅在development.rb中使用,而不是production.rb,因爲Web服務器(例如Apache,Nginx)應該爲生產。 – CFitz

20

如果您升級到Rails的新版本(想起Rails 4和Rails 3.2.16),並且您突然發現此錯誤,那麼您的樣式表很可能指向非指紋,非指紋,緩存的文件版本。如果您正在使用資產管道,爲了利用它,您需要使用指向指紋緩存版本文件的新幫助程序。爲此,您需要將erb嵌入到您的css文件中,或者使用sass。

不正確的(使用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

+2

升級到Rails 3.2.16後,這讓我感到困惑,所以它不僅僅是4.x. –

+1

@MarkBerry感謝您的支持。我會更新我的答案以包括該版本。 –

+1

根據文檔,人們也可以使用asset-url('yourimage.png'),所以它會出現'圖像'添加不起作用 - 只是由語法提琴手強制命名約定更改。當然,我可以在所有我工作的項目中的所有成千上萬行css上運行awk腳本,但這可能會在某些無法預料的情況下失敗並破壞事情。任何人都知道一個gem恢復了這個和類似語法的原始功能 - 奇思妙想的改變? – JosephK

5

,你必須運行此命令

rake assets:precompile 
7

可能幫助某人,我嘗試了所有的答案,並忘記了要做的最基本的事情。清除瀏覽器緩存,一旦做我是好去:)

+0

這是甚麼事?你的建議很有用,但我覺得這很有必要。 – HappyCoder86

0

我一直使用資產的管道,但不得不改變硬編碼的URL,我用如下(我的開發環境):

我更新我的/config/application.rb使用資產管道:

config.assets.enabled = true 

我改變了我的所有圖片的URL指向「/assets/image_without_old_image_directory_name.jpg」

因此,例如,我的圖片用於在/public/images/xxx.jpg中。我將它們移動到/app/assets/images/xxx.jpg。我將img src從/images/xxx.jpg更改爲/assets/xxx.jpg

我最終不需要執行資源預編譯,只是簡單地刪除了/ public和in/tmp,它只是工作(用於開發)。

相關問題