2011-08-23 22 views
6

実際の動作がどういうものなのかよくわからないので、最初の質問は
宝石(私の場合はSpree)のアセット(例えばjavascripts) ?私はSpreeのjavascriptを使用しないので、それらをコンパイルしたくない。私は私のapplication.jsまたは任意の他のJavaScriptファイルにそれらを必要としませんが、rails 3.1アセットパイプライン:宝石の資産を無視する

rake assets:precompile 

は、それにもかかわらず、それらをコンパイルします。私はちょうどそれらを私のpublic/assetsのフォルダーの中に横たえたくない。

私の質問は、宝石からjavascriptをコンパイルできないようにする方法があるのでしょうか?

答えて

2

sprocketsを使用して目標を達成するスマートな方法があると思います。おそらくrequire_treeの代わりにrequire_directoryの一部です。

しかし、最も直接的なことは、これらのアセットをアセットのパスから削除することです。


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 
ちょうどハックを試してみました:これを達成するために、非常に終わり、あなたの application.rbファイルのでこの を追加します(初期化子では動作しません)initializerにコードを置くが、あなたのapplication.rbの終わりに、それを必要とする:

require "config/initializers/your_file' 

が、私はこの方法で表示されるように非常に特定のコードを好みます。それは、Railsの4.Xでは動作しませんでした

+0

、私はそれを試してみましょう! –

+0

Rails 4.0.0では、イニシャライザが無視されるようです。試してみてください: クラスエンジン mmell

3

、可能な(汚い)回避策は次のとおりです。多くのthnx

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

これをconfig/initializers/duplicate_assets.rbに入れても、うまく動作しました。レールランナーでテストできます "Rails.application.assets.find_asset( 'jquery.js')。to_a.map(&:パス名)" – grosser

関連する問題