Ruby on rails rails 3.1资产管道:忽略来自gem的资产

Ruby on rails rails 3.1资产管道:忽略来自gem的资产,ruby-on-rails,sprockets,asset-pipeline,Ruby On Rails,Sprockets,Asset Pipeline,我不太清楚实际的行为是什么,所以我的第一个问题是: 是否总是编译来自gem(在我的例子中是Spree)的资产(例如javascripts)?我不使用Spree的Java脚本,因此不希望编译它们。我不需要在我的application.js或任何其他javascript文件中使用它们,但是 rake assets:precompile 尽管如此,还是汇编了它们。我只是不想让它们躺在我的public/assets文件夹中 所以我想我的问题是,有没有一种方法可以禁用从gem编译java脚本?我想有一种

我不太清楚实际的行为是什么,所以我的第一个问题是:
是否总是编译来自gem(在我的例子中是Spree)的资产(例如javascripts)?我不使用Spree的Java脚本,因此不希望编译它们。我不需要在我的
application.js
或任何其他javascript文件中使用它们,但是

rake assets:precompile
尽管如此,还是汇编了它们。我只是不想让它们躺在我的
public/assets
文件夹中


所以我想我的问题是,有没有一种方法可以禁用从gem编译java脚本?

我想有一种聪明的方法可以使用
sprockets
实现您的目标。可能有些
需要\u目录
,而不是
需要\u树

但最直接的事情是从您的资产路径中删除这些资产。要实现这一点,请在
应用程序.rb
文件的最末尾添加此(在初始值设定项中不起作用):

我更喜欢以这种方式显示非常特定的代码。

Rails 4.X 它在Rails 4.X上不起作用,一个可能的(肮脏的)解决方法是:

require 'sprockets/railtie'

Bundler.require(:default, Rails.env)

module Sprockets
  module Paths
    SKIP_GEMS = ["rails-assets-jquery", "rails-assets-bootstrap"]

    def append_path_with_rails_assets(path)
      append_path_without_rails_assets(path) unless SKIP_GEMS.any? { |gem| path.to_s.start_with?(Gem.loaded_specs[gem].full_gem_path) }
    end

    alias_method_chain :append_path, :rails_assets
  end
end
Rails 5.X的更新 自从Rails 5.X以来,
alias\u method\u chain
已被弃用。这是一个更新版本,它使用了
prepend
,并覆盖了
Sprockets::Environment
模块,而不是
Sprockets::path

module SprocketsPathsOverride
  SKIP_GEMS = ["rails-assets-jquery", "rails-assets-bootstrap"]

  def append_path(path)
    should_skip = SKIP_GEMS.any? do |gem|
      path.to_s.start_with?(Gem.loaded_specs[gem].full_gem_path)
    end
    super(path) unless should_skip
  end
end

Sprockets::Environment.prepend(SprocketsPathsOverride)

在Rails 4.0.0中,似乎忽略了初始值设定项。Try:class Enginerequire 'sprockets/railtie' Bundler.require(:default, Rails.env) module Sprockets module Paths SKIP_GEMS = ["rails-assets-jquery", "rails-assets-bootstrap"] def append_path_with_rails_assets(path) append_path_without_rails_assets(path) unless SKIP_GEMS.any? { |gem| path.to_s.start_with?(Gem.loaded_specs[gem].full_gem_path) } end alias_method_chain :append_path, :rails_assets end end
module SprocketsPathsOverride
  SKIP_GEMS = ["rails-assets-jquery", "rails-assets-bootstrap"]

  def append_path(path)
    should_skip = SKIP_GEMS.any? do |gem|
      path.to_s.start_with?(Gem.loaded_specs[gem].full_gem_path)
    end
    super(path) unless should_skip
  end
end

Sprockets::Environment.prepend(SprocketsPathsOverride)