具有资产的 Rails gem 不会添加到 config.assets.paths

Posted

技术标签:

【中文标题】具有资产的 Rails gem 不会添加到 config.assets.paths【英文标题】:Rails gems that have assets are not added to config.assets.paths 【发布时间】:2016-12-24 11:21:54 【问题描述】:

我正在将 Rails 3.0 应用程序升级到 Rails 4.2。在 Rails 3.1 中添加资产管道后,我注意到包含资产的 gem 没有添加到 Rails.application.config.assets.paths

我将这些宝石添加到我的Gemfile

gem 'jquery-rails'
gem 'jquery-ui-rails'

我希望将这些目录添加到Rails.application.config.assets.paths

 ~/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/jquery-ui-rails-5.0.5/app/assets/images
 ~/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/jquery-ui-rails-5.0.5/app/assets/javascripts
 ~/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/jquery-ui-rails-5.0.5/app/assets/stylesheets
 ~/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/jquery-rails-4.0.3/vendor/assets/javascripts

但是,它只显示我的app/assets 文件夹中的文件夹。这是Rails.application.config.assets 的完整输出。我在其他没有遇到此问题的 Rails 应用程序中具有完全相同的配置。

 :_blocks=>
   [#<Proc:0x007fa6070a9b50@~/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sprockets-rails-3.1.1/lib/sprockets/railtie.rb:126>,
    #<Proc:0x007fa6070a9948@~/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sprockets-rails-3.1.1/lib/sprockets/railtie.rb:130>,
    #<Proc:0x007fa6070a9600@~/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sprockets-rails-3.1.1/lib/sprockets/railtie.rb:137>,
    #<Proc:0x007fa6070a8fc0@~/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sprockets-rails-3.1.1/lib/sprockets/railtie.rb:149>,
    #<Proc:0x007fa6070a8958@~/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sprockets-rails-3.1.1/lib/sprockets/railtie.rb:153>,
    #<Proc:0x007fa6070a87f0@~/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sprockets-rails-3.1.1/lib/sprockets/railtie.rb:157>],
  :paths=>
   ["~/my-app/app/assets/images",
    "~/my-app/app/assets/javascripts",
    "~/my-app/app/assets/stylesheets"],
  :precompile=>
   [#<Proc:0x007fa6070ab680@~/.rbenv/versions/2.3.1/lib/ruby/gems/2.3.0/gems/sprockets-rails-3.1.1/lib/sprockets/railtie.rb:84 (lambda)>,
    /(?:\/|\\|\A)application\.(css|js)$/],
  :prefix=>"/assets",
  :manifest=>nil,
  :quiet=>false,
  :version=>"1.0",
  :debug=>true,
  :compile=>true,
  :digest=>true,
  :cache_limit=>52428800,
  :gzip=>true,
  :check_precompiled_asset=>true,
  :compress=>false,
  :raise_runtime_errors=>true,
  :enabled=>true,
  :logger=>false,
  :resolve_with=>[:environment]

【问题讨论】:

【参考方案1】:

很可能您在Gemfile 中仍有assets 组。

assets 分组概念是 Rails 3 的遗留物,has been removed in rails 4.0

Rails 4.0 从 Gemfile 中删除了资产组。你需要删除 升级时 Gemfile 中的那一行。

在我最近从 3.0 升级到 4.0 的 Rails 应用程序上,包括 assets 组中的 gem 阻止了 gem 资产包含在 Rails.application.config.assets.paths 中。从 Gemfile 中删除 assets 组,并更新包修复了问题。

【讨论】:

以上是关于具有资产的 Rails gem 不会添加到 config.assets.paths的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 - 具有简单形式的依赖字段的 JS

rails - Gibbon mailchimp gem 将订阅者添加到列表中,但不发送确认电子邮件

Rails 3 自动资产部署到 Amazon CloudFront?

Rails 预编译供应商/资产

为啥“jQuery-Rails”经常在资产组之外

如何将 toastr-rails gem 添加到 Rails 6 项目?