2011-09-26 63 views
14

我已經在幾個目錄中組織了我的JavaScript文件,並且發現了以下奇怪的行爲。考慮下面的樹:Rails 3.1:從供應商/資產目錄無法正確提供javascripts?

+ app 
    + assets 
    + javascripts 
     + common 
     + public 
     + common 
     + home 
      - home.js 

home.js看起來是這樣的:

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require_directory ../../jquery_plugins 
//= require_directory ../../common 
//= require_directory ../common 
//= require_self 

現在的伎倆在於jquery_plugins目錄。我把它放在vendor/assets/javascripts(它包含在資產加載路徑中,當我檢查Rails.application.config.assets.paths時)。當我這樣做時,我得到錯誤:require_tree argument must be a directory。當我將該目錄移動到app/assets/javascripts時,一切正常。

有沒有人知道我做錯了什麼?或者這是一個錯誤?

回答

12

我有同樣的問題。我仍然不確定這是一個錯誤還是故意行爲,但Rails.application.config.assets.paths似乎只適用於單個文件,即require jquery等。顯然資產加載路徑僅用於返回單個require的最佳匹配,但不用於require_directoryrequire_tree

在我的情況,從vendor/assets/javascripts加載的所有文件,我不得不添加下面我app/assets/javascripts/application.js

//= require_tree ../../../vendor/assets/javascripts/. 

在你的情況是這樣的應該工作:

//= require jquery 
//= require jquery_ujs 
//= require jquery-ui 
//= require_directory ../../../../../vendor/assets/javascripts/jquery_plugins 
//= require_directory ../../common 
//= require_directory ../common 
//= require_self 

似乎您始終必須使用文件的相對路徑require_directoryrequire_tree

另外,我發現在JS-資產結構的討論是有益的:Rails 3.1 asset pipeline and manually ordered Javascript requires

+0

是的,對於樣式表也是''= require_tree ../../../ vendor/assets/stylesheets/.'。 – LearningRoR

27

你可以一個清單文件添加到你試圖服務的東西,如目錄 vendor/assets/javascripts/jquery_plugins/manifest.js

//= require_directory . 

,並通過

//= require jquery_plugins/manifest 
需要在你的 app/assets/javascripts/application.js 10編輯(更簡單的方法)

感謝@LeEnno這個

實際上,你可以把你所有的單個庫的相關文件,例如vendor/assets/javascripts/bootstrap庫後在同一個文件夾命名的文件夾中添加一個index.js這將作爲你的清單和Rails會自動把它撿起來

如果您

app/assets/javascripts/application.js 

添加行

//= require bootstrap 

很容易!
鏈接到Rails Asset Pipeline Guide

+0

我仍然這樣做,所以如果有反對票的原因,我會喜歡一些反饋。 – mraaroncruz

+3

比投票的方式更清潔...人們怎麼了 – Plattsy

+0

這看起來更乾淨,我喜歡它。儘管如此,我還是猶豫不決,因爲我喜歡在vendor /中只有* vendor *代碼,所以如果我在那裏更改或更新內容,我不必擔心覆蓋我寫的代碼。我懷疑類似的想法是(前?)降價來自何處。 – jpadvo