2015-11-12 20 views
1

我想通過一個js文件在資產管道訪問的圖像,但是我收到一個404錯誤,圖像不存在。我的理解是,Rails的指紋和預編譯/預加載圖像/資產到瀏覽器,所以文件路徑「imageName.png」成爲東西「imageName-uniqueFingerprint.png」的效果,從而使原來的路徑不再有效。 (糾正我,如果我誤解)圖像資產可用於CSS文件但不是JS文件 - 爲什麼?

我不明白的是爲什麼我可以在CSS文件中使用原始路徑,例如:background: url('nebula_small.png')和圖像檢索得很好,但是如果我嘗試使用JS文件中的相同路徑我得到了404.我認爲Assets目錄中的所有內容都是由Rails預編譯的,因此我認爲它們可以平等地訪問相應的資源。

我可以寫一個輔助方法(每this StackOverflow suggestion)的digest_path到原來的路徑關聯,但我不知道是否有一些方法,輕易地放棄了JS文件到CSS文件具有圖像相同的訪問。

仍然不熟悉Rails的,所以如果你需要澄清或我措辭不好這個,我向你道歉。謝謝您的時間。

+0

任何機會的路徑,在JS文件圖像需要使用[主HTML文件位置的根(HTTP://計算器。 COM /問題/ 2188218 /相對路徑-在JavaScript的功能於一個外部的文件),而在CSS文件的路徑是[相對於CSS文件(http://stackoverflow.com/questions/5815452/如何使用的相對絕對路徑功能於CSS-URL)的?即如果你使用絕對路徑,你的問題仍然存在嗎? – ghybs

+0

你不能在css中實際使用原始路徑。當你使用像'背景:圖像URL(「image.png」)',鏈輪將指紋添加到它(在生產中只) –

+0

@ghybs我剛試過了,也不行,但一個好主意。 –

回答

1

我想給.erb擴展添加到您的.js文件最簡單的方法,並使用asset_path軌幫手:

$('#logo').attr({ src: "<%= asset_path('logo.png') %>" }); 

第二種方式,這是更復雜一點,將分析你.sprockets-manifest-md5hash.json文件,該文件被編譯到您的公共文件夾,其中包含的所有網址應用到您的圖像。你可以閱讀更多關於它在這裏:

http://edgeguides.rubyonrails.org/asset_pipeline.html#precompiling-assets

https://github.com/rails/sprockets/blob/master/UPGRADING.md#publicassetsmanifest-abc123json-location

相關問題