2011-08-23 10 views
6

Non sono abbastanza sicuro di quale sia il comportamento effettivo, quindi la mia prima domanda è:
Le risorse (ad esempio javascript) di una gemma (nel mio caso Spree) sono sempre compilate ? Non uso i javascript di Spree e quindi non voglio che vengano compilati. Io non li richiedono a mio o qualsiasi altro file JavaScript application.js, marotaie 3.1 asset pipeline: ignora le risorse di una gemma

rake assets:precompile 

li compila comunque. Non voglio che si trovino nella mia cartella public/assets.

Quindi penso che la mia domanda sia, c'è un modo per disabilitare la compilazione di javascript da una gemma?

risposta

2

Immagino che ci sia un modo intelligente per raggiungere il tuo obiettivo usando sprockets. Forse alcuni require_directory anziché require_tree.

Ma la cosa più diretta sarebbe rimuovere queste risorse dai percorsi delle risorse. Per raggiungere questo obiettivo, aggiungere questo alla fine del file application.rb (non funziona in un inizializzatore):

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 

appena provato un hack: mettere il codice in un initializer ma richiedono alla fine della vostra application.rb:

require "config/initializers/your_file' 

preferisco codice molto preciso per essere visibile in questo modo.

+0

thnx molto, cercherò questo! –

+0

In Rails 4.0.0 sembra che l'inizializzatore sia ignorato. Prova: classe Motore mmell

3

Non ha funzionato on Rails 4.X, una possibile (sporco) soluzione è:

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

mettere questo in config/initializers/duplicate_assets.rb ha funzionato bene anche per me. Può essere testato con il runner di rails "mette Rails.application.assets.find_asset ('jquery.js'). To_a.map (&: pathname)" – grosser

Problemi correlati