2011-08-23 9 views
6

Asıl sorunun ne olduğundan emin değilim, bu yüzden benim ilk sorum:
Varlıklar (örn. Javascripts) bir gemiden (benim durumumda) her zaman derlenmiş ? Spree'nin javascriptlerini kullanmıyorum ve bu yüzden bunların derlenmesini istemiyorum. Benim application.js veya başka bir javascript dosyasında gerekmez, ancakraylar 3.1 kıymetli boru hattı: bir gemideki varlıkları yok sayma

rake assets:precompile 

yine bunları derler. Sadece benim public/assets klasöründe yalan istemiyorum.

Sanırım sorum şu, bir javascript'i bir gemiden derlemenin bir yolu var mı?

cevap

2

sprockets'u kullanarak hedefinize ulaşmanın akıllı bir yolu olduğunu düşünüyorum. Belki require_tree yerine require_directory.

Ancak en doğrudan şey, varlıkları varlıklarınızın yollarından kaldırmaktır.


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 
Sadece yazarlardan çalıştı: Bunu başarmak için, en sonuna da application.rb dosyanın bu eklemek (bir in başlatıcısı çalışmaz) bir initializer kodu koymak ancak senin application.rb sonunda bunu gerektirir:

require "config/initializers/your_file' 

Ben bu şekilde görünür olmasını çok özel bir kod tercih ederim.

+0

thnx çok, ben o çalışacağım! –

+0

Rails 4.0.0'da, başlatıcı göz ardı ediliyor gibi görünüyor. sınıfı Motor mmell

3
O Raylar 4.X işe yaramadı

, olası bir (kirli) geçici çözüm:

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

bunu config/initializers/duplicate_assets.rb içine koymak benim için de iyi çalıştı. Raylar koşucu ile test edilebilir "Rails.application.assets.find_asset ('jquery.js') koyar. To_a.map (&: yol adı)" – grosser