2011-09-26 59 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

相关问题