默认情况下,Rails 只查看 3 个位置:app/assets
, lib/assets
or vendor/assets
。 Sprockets 在子目录中查找 JS 资源javascripts
. E.g.
app/assets/javascripts/arbor.js
lib/assets/javascripts/arbor.js
vendor/assets/javascripts/arbor.js
如果你想查看 Rails 正在寻找的位置,可以在控制台中使用:Rails.application.config.assets.paths
您可以做的是将自定义路径添加到管道中:
# @file: config/application.rb
config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "javascripts")
然后创建一个清单,在其中包含 JS 文件:
# @file: /vendor/gems/neo-viz/app/assets/javascripts/neo-viz.js
//= require lib/jQuery/jquery-1.6.1.min
//= require lib/arbor/arbor
//= require neo-viz
最后添加你的清单:
config.assets.precompile += %w( neo-viz.js )'
如果您仍然想单独添加它们,我不明白这一点,为什么不将它们包含在清单中,那么您必须添加all可能的路径前缀,以便 Rails 知道去哪里查找:
# @file: config/application.rb
config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "stylesheets")
config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "javascripts")
config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "javascripts", "lib", "jQuery")
config.assets.paths << Rails.root.join("vendor", "gems", "neo-viz", "app", "assets", "javascripts", "lib", "arbor")
然后您可以像这样添加它们,因为清单之外的资产必须添加到预编译数组中:
config.assets.precompile += %w( jquery-1.6.1.min.js arbor.js neo-viz.js neo-viz.css )
Source: 2.1 资产组织 http://guides.rubyonrails.org/asset_pipeline.html#asset-organization