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 Engine
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
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)