2014-07-06 17 views
0

我有一個用Rails編寫的Heroku上的應用程序,它在着陸頁上有一個大圖像作爲背景。由於Heroku的文件系統是隻讀的,我決定在AWS S3上存儲這些圖像(它們是隨機選擇的)。Rails:引用在CSS中的圖像

我在的CSS(.scss)的代碼如下所示(簡化):

html { 
    background: image-url('#{image}.jpg') no-repeat center center fixed; 
} 

我現在的問題是,我的應用程序能夠在發展中正確顯示圖像,但它是不能夠在生產中顯示圖像(在Heroku上)。當在交付.css文件(瀏覽器)來看,我覺得我看到的錯誤:

html { 
    background: url("8017416067_4f6f75f956_o.jpg") no-repeat center center fixed; 
    -webkit-background-size: cover; 
    background-size: cover; 
} 

看來,哈希不追加,雖然我用image-url,如上所見和建議我。即here。文件在S3上的文件名是8017416067_4f6f75f956_o-058c92aeab457efe0625a777f203430d.jpg

對我在做什麼有什麼建議嗎?

編輯:我注意到,在我從本地機器得到的.css文件中,圖像的引用爲/assets/8017416067_4f6f75f956_o.jpg(不含引號),而在線應用程序給我"8017416067_4f6f75f956_o.jpg"

解決:我不知道爲什麼,但突然它有效。我做的最後一件事是我刪除了整個public/assets文件夾以使Heroku預先編譯資產本身。

+0

看看http://stackoverflow.com/a/21974342/2300000 – Monideep

回答

0

我在生產環境中遇到了同樣的問題env - 網址沒有附加散列。原因是我的* .css文件沒有爲生產環境編譯,所以網站使用原始的* .css文件和「非哈希」URL。

首先,檢查你是否在瀏覽器中看到編譯後的CSS,即它的名字是附加散列。在情況下,如果未編譯* .css文件使用,你可以檢查它是否被包括在「編譯」的文件列表中config/environments/production.rb

config.assets.precompile += %w(mystyles.css) 

The Asset Pipeline: Precompiling Assets

還有一個原因,我看可能是編譯在錯誤的環境下運行(不適用於生產)。在您的服務器上使用以下命令:

RAILS_ENV=production bundle exec rake assets:precompile 

但我認爲Heroku默認已經運行此命令,提及以防萬一。

+0

不,.css文件都附加了散列。另外,我徒然在服務器上運行你的命令。 – BlackMamba