2011-07-03 237 views
50

我想在我的Rails 3.1應用程序中將一些外部圖像(由jQuery插件使用)供應商/資產/圖像。問題是,當我嘗試類似:Rails 3.1從供應商/資產/圖像提供圖像

<%= image_tag "ui-bg_flat_75_ffffff_40x100.png" %> 

我得到一個錯誤:

No route matches [GET] "/assets/ui-bg_flat_75_ffffff_40x100.png" 

我檢查了我的Rails.application.config.assets.paths並列出這些迪爾斯:

..../app/assets/images 
..../app/assets/javascripts 
..../app/assets/stylesheets 
..../vendor/assets/images 
..../vendor/assets/stylesheets 
..../.rvm/gems/[email protected]/gems/jquery-rails-1.0.9/vendor/assets/javascripts 

正如你可以看到/ vendor/assets/images在那裏列出。如果我把我的圖片放到應用/資產/圖片中,一切正常。

我認爲新的資產管道應該通過所有的資產目錄,併爲所需的文件提供服務,無論它找到它。

有沒有人知道這裏有什麼問題?

+0

對不起,並不完全有助於您的問題,但您如何看到Rails.application.config.assets.paths? – Martin

+1

@martin:你可以在控制檯看到它 –

+0

這可能是一個愚蠢的問題,但是你的jqueryui資源在images目錄中?我在圖像目錄中,然後在他們自己的子目錄中保存jqueryui主題製作者生成的CSS路徑。 – Slick23

回答

80

創建vendor/assets/images目錄後,我不得不重新啓動我的rails服務器。在此之前,我看到與您同樣的錯誤(「沒有路線匹配[GET]」)。

我的猜測是,rails服務器不會檢查這些目錄,如果它們在第一次啓動時不存在。當你打開一個rails控制檯來診斷問題時,你會得到一個知道目錄的新的rails實例,這隻會增加混淆。

+1

重新啓動的伎倆。謝謝! –

+0

使用Pow(粉末寶石)我只是嘗試了'粉末重新啓動'沒有運氣。然後,我嘗試了「粉碎」和「粉碎」,最後Rails.application.config.assets.paths包含供應商/資產/圖像。 – Chris

+1

'粉末重新啓動'爲我做了訣竅 – Cristian

9

Ryan Bigg在此導軌指南中介紹了資產流水線(草稿狀態)。

http://ryanbigg.com/guides/asset_pipeline.htmlhttp://ryanbigg.com/2011/06/sprocket-asset-tags-internals/供參考。

據此,你的例子應該工作。

提取物:

Assets can be placed inside an application in one of three locations: app/assets, lib/assets or vendor/assets.

app/assets is for assets that are owned by the application, such as custom images, javascript files or stylesheets.

lib/assets is for your own libraries’ code that doesn’t really fit into the scope of the application or those libraries which are shared across applications.

vendor/assets is for assets that are owned by outside entities, such as code for JavaScript plugins.

Any subdirectory that exists within these three locations will be added to the search path for Sprockets (visible by calling Rails.application.config.assets.paths in a console). When an asset is requested, these paths will be looked through to see if they contain an asset matching the name specified. Once an asset has been found, it’s processed by Sprockets and then served up.

我已經在我的應用程序的例子,相同的語法測試爲你工作。也許你的資產名稱存在拼寫錯誤。

對於Martin:通過在控制檯中調用Rails.application.config.assets.paths來查看Sprockets的搜索路徑。

+0

是的,我讀過。這就是我認爲它應該起作用的原因。也許這是一個錯誤。 –

+0

對我來說它確實有效。您是否嘗試將您的資產重新命名爲測試? –

+0

這是一個反覆出現的問題,我在我的所有應用程序中構建Rails 3 – botbot

22

如果您使用的是jQuery UI Theme Roller主題,那麼問題可能在於jquery-ui css文件中的圖像是在子文件夾'images'中引用的。

I.e.你必須把你的圖片放在一個文件夾'./app/assets/images/images'或者你必須編輯jquery-ui css文件並刪除'images /'文件夾前綴。

+8

有點令你困惑,你可能會看到'GET http://example.com/assets/images/darrowleft.gif 404(不是發現)'在一個JavaScript控制檯中,你有'vendor/assets/images'中的那個圖像。但是,您應該*查看URL http:// example.com/assets/darrowleft.gif'。要查看'http:// example.com/assets/images/darrowleft.gif',您必須將該圖像作爲@woelfle解釋的'vendor/assets/images/images'。這樣做可以節省您不必修改出售的CSS文件中的路徑的麻煩。 –

+0

將圖像放在另一個叫做圖像的文件夾中似乎很奇怪,但在rails 3.1.3上爲我工作。謝謝! – counterbeing

+0

謝謝你,喬治,那是我拼圖中缺失的一塊! – Sprachprofi

2

也許你應該在/ assets/images中創建另一個文件夾。你創建一個名稱'圖像',然後你只需複製所有jquery-ui圖像並粘貼到之前創建的文件夾'圖像'上。希望這會幫助你。