2011-08-23 8 views
6

No estoy muy seguro de cuál es el comportamiento real, así que mi primera pregunta es:
Son activos (por ejemplo, javascripts) de una joya (en mi caso Spree) siempre compilados ? No utilizo javascripts de Spree y, por lo tanto, no quiero que se compilen. No requiero en mi o cualquier otro archivo JavaScript application.js, perocarriles 3.1 canalización de activos: ignorar los activos de una gema

rake assets:precompile 

los compila, no obstante. Simplemente no quiero que mientan en mi carpeta public/assets.

Así que supongo que mi pregunta es, ¿hay alguna forma de desactivar la compilación de javascripts de una gema?

Respuesta

2

Supongo que hay una manera inteligente de lograr su objetivo usando sprockets. Tal vez algunos require_directory en lugar de require_tree.

Pero lo más directo sería eliminar esos activos de sus rutas de activos. Para lograr esto, añadir este al final de su archivo application.rb (no funciona en un inicializador):

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 

acaba de intentar un truco: poner el código en un initializer pero requerir que al final de su application.rb:

require "config/initializers/your_file' 

prefiero código muy específica para ser visible de esta manera.

+0

thnx mucho, voy a tratar eso! –

+0

En Rails 4.0.0 parece que se ignora el inicializador. Pruebe: clase Engine mmell

3

No funcionó en los carriles 4.X, una posible (sucio) solución es:

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

poniendo esto en config/initializers/duplicate_assets.rb funcionó bien para mí también. Se puede probar con Rails Runner "puts Rails.application.assets.find_asset ('jquery.js'). To_a.map (&: pathname)" – grosser

Cuestiones relacionadas