如何在Rails中获取供应商子文件夹中的资产?

时间:2018-06-04 22:36:33

标签: ruby-on-rails ruby asset-pipeline vendor

我需要在我的应用程序中安装一系列lib,将它们保存在/vendor/plugins/

内的各自文件夹中

示例,ckeditor库:

  • /vendor/plugins/ckeditor/
  • 中的主要文件夹
  • /vendor/plugins/ckeditor/js/Chart.js
  • 中的js文件
  • /vendor/plugins/ckeditor/css/chart.min.css
  • 中的css文件

这样我就可以像这样导入我的application.scss:

*= require chart.min

在我的application.js中这样:

//= require Chart.js

当我尝试这样做时,rails只访问文件夹/vendor/assets/plugins/插件,生成错误:

could not find file 'chart.min' with type 'text/css'

如何让项目扫描所有供应商的子文件夹,直到找到我导入的文件?

1 个答案:

答案 0 :(得分:4)

首先将/vendor/plugins目录添加到资产加载路径:

module MyApp
  class Application < Rails::Application
    config.assets.paths << Rails.root.join("vendor", "plugins")
    # Settings in config/environments/* take precedence over those specified here.
    # Application configuration should go into files in config/initializers
    # -- all .rb files in that directory are automatically loaded.
  end
end

但是,将目录添加到资产加载路径并不意味着Sprockets将递归搜索所有子目录。配置它也不是一个好主意。

您仍然需要提供/vendor/plugins的完整路径。

应用程序/资产/ Javascript角/ application.js中:

//= require ckeditor/js/Chart

应用程序/资产/样式表/ application.css:

*= require ckeditor/css/chart.min

或者您可以使用Rails integration gem并跳过所有麻烦。