2011-08-23 15 views
6

Nie jestem całkiem pewien, jakie jest rzeczywiste zachowanie, więc moje pierwsze pytanie brzmi:
Czy zasoby (np. Javascripts) z klejnotu (w moim przypadku Spree) zawsze się kompilują ? Nie używam javascriptów Spree, dlatego nie chcę ich kompilować. Nie wymaga od nich w moim application.js lub dowolny inny plik JavaScript, alerails 3.1 potok aktywów: ignorowanie aktywów z klejnotu

rake assets:precompile 

kompiluje je mimo wszystko. Po prostu nie chcę, żeby leżeli w moim folderze public/assets.

Sądzę, że moje pytanie brzmi: czy istnieje sposób wyłączenia kompilowania javascripts z gem?

Odpowiedz

2

Domyślam się, że istnieje inteligentny sposób na osiągnięcie celu za pomocą sprockets. Może jakiś require_directory zamiast require_tree.

Ale najbardziej bezpośrednią rzeczą byłoby usunięcie tych zasobów z twoich ścieżek aktywów. Aby to osiągnąć, należy dodać ten na samym końcu z pliku application.rb (nie działa do inicjowania):

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 

Wystarczy spróbował Hack: umieścić kod w initializer ale wymaga to w końcu application.rb:

require "config/initializers/your_file' 

wolę bardzo specyficzny kod, aby były widoczne w ten sposób.

+0

thnx dużo, spróbuję to! –

+0

W Rails 4.0.0 wygląda na to, że inicjator jest ignorowany. Wypróbuj: Klasa Engine mmell

3

To nie działa on Rails 4.x możliwe (brudny) Rozwiązaniem jest:

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 
+0

wstawienie tego do config/initializers/duplicate_assets.rb również działało dobrze dla mnie. Może być przetestowany z użyciem Rails Runner "umieszcza Rails.application.assets.find_asset ('jquery.js'). To_a.map (&: pathname)" – grosser

Powiązane problemy