Rails 3.1:javascripts从供应商/资产目录无法正确提供?

Pas*_*auf 14 ruby-on-rails-3.1 asset-pipeline

我已经在几个目录中组织了我的javascript文件,我发现了以下奇怪的行为.鉴于以下树:

+ app
  + assets
    + javascripts
      + common
      + public
        + common
        + home
          - home.js
Run Code Online (Sandbox Code Playgroud)

home.js 看起来像这样:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_directory ../../jquery_plugins
//= require_directory ../../common
//= require_directory ../common
//= require_self
Run Code Online (Sandbox Code Playgroud)

现在的诀窍在于jquery_plugins目录.我把vendor/assets/javascripts它放在里面(当我检查时,它包含在资产加载路径中Rails.application.config.assets.paths).当我这样做时,我得到错误:require_tree argument must be a directory.当我移动该目录时,app/assets/javascripts一切正常.

有没有人知道我做错了什么?或者这是一个错误?

mra*_*ruz 27

您可以将清单文件添加到您尝试使用的目录中 vendor/assets/javascripts/jquery_plugins/manifest.js

//= require_directory .
Run Code Online (Sandbox Code Playgroud)

并在你的app/assets/javascripts/application.js通道中要求它

//= require jquery_plugins/manifest
Run Code Online (Sandbox Code Playgroud)

编辑(甚至更简单的方式)

感谢@LeEnno

实际上,您可以将所有与库相关的文件放在以库命名的文件夹vendor/assets/javascripts/bootstrap中,并在同一文件夹中添加一个index.js将充当您的清单的文件,Rails会自动将其拾取

如果在你的

app/assets/javascripts/application.js
Run Code Online (Sandbox Code Playgroud)

你添加线

//= require bootstrap
Run Code Online (Sandbox Code Playgroud)

太简单!!!
链接到Rails资产管道指南

  • 比投票更清洁的方式......人们有什么不对 (3认同)

Fra*_*ane 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/.
Run Code Online (Sandbox Code Playgroud)

在你的情况下,这样的东西应该工作:

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require_directory ../../../../../vendor/assets/javascripts/jquery_plugins
//= require_directory ../../common
//= require_directory ../common
//= require_self
Run Code Online (Sandbox Code Playgroud)

看来你总是必须使用相对路径从那里你调用文件require_directoryrequire_tree.

此外,我发现有关JS资产结构的讨论很有帮助:Rails 3.1资产管道和手动排序的Javascript需要