рельсы 3.1 конвейер активов: игнорировать активы из драгоценного камня - PullRequest
6 голосов
/ 23 августа 2011

Я не совсем уверен, каково реальное поведение, поэтому мой первый вопрос:
Всегда ли компилируются активы (например, javascripts) из самоцвета (в моем случае Spree)? Я не использую javascript-коды Spree и поэтому не хочу, чтобы они компилировались. Я не требую их в моем application.js или любом другом файле JavaScript, но

rake assets:precompile

тем не менее компилирует их. Я просто не хочу, чтобы они валялись в моей папке public/assets.

Итак, я думаю, у меня вопрос, есть ли способ отключить компиляцию javascripts из драгоценного камня?

Ответы [ 2 ]

3 голосов
/ 27 июня 2014

Это не работает на 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
2 голосов
/ 23 августа 2011

Я думаю, что есть разумный способ достичь вашей цели, используя sprockets. Может быть, немного require_directory вместо require_tree.

Но самым прямым способом было бы удалить эти активы из ваших путей активов. Для этого добавьте в самом конце вашего application.rb файла (не работает в инициализаторе):

class Engine < Rails::Engine
   initializer "remove assets directories from pipeline" do |app|
     app.config.assets.paths = app.config.assets.paths - app.config.assets.paths.grep(/nice_regexp_here_to_match_the_dir_where_the_unwanted_files_live/)
   end
end

Только что попробовал взломать: поместите код в initializer, но потребуйте его в конце вашего application.rb:

require "config/initializers/your_file'

Я предпочитаю, чтобы таким образом был виден очень специфичный код.

...