2012-06-06 11 views
64

これはRTFM型の質問ですが、私はまだrails/ruby​​/bundlerには新しく、やや混乱しています。私たちのconfig/application.rbファイルでrails bundle install productionのみ

このバンドラ・セグメントがあります:

if defined?(Bundler)   
    # If you precompile assets before deploying to production, use this line 
    Bundler.require(*Rails.groups(:assets => %w(development test))) 
    # If you want your assets lazily compiled in production, use this line 
    # Bundler.require(:default, :assets, Rails.env) 
end 

と私たちのGemfileに我々は異なるグループを使用し、例えばが

group :development, :test do 
    gem "rspec-rails", ">= 2.7.0", :group => [:development, :test] 
    gem 'shoulda-matchers' 
    gem 'watchr' 
    gem 'spork', '~> 1.0rc' 
    gem 'spectator'       
    gem 'debugger' 
    gem 'wirble' 
end 

しかし、私はRAILS_ENV=production bundle install(またはbundle install --deployment)を実行すると、それはまだ、開発/テストグループから宝石をインストールする...

は、なぜこれが起こるんまたはどのように私は適切にこの作業を行うことができますか?

答えて

140

--withoutオプションを見てみましょう:デフォルトバンドラーによって

bundle install --without development test

は、すべての宝石をインストールし、アプリケーションが必要とする宝石を使用しています。 Bundler自身は、Railsと現在の環境について何も知らない。

+2

私は '--without'について知っていますが、特に' config/application.rb'の設定ディレクティブ(これを正確に扱うことになっています)と、この引用を考慮すると、 3はbundlerのサポートでベーキングされています。](http://gembundler.com/rails3.html) – gingerlime

+2

バンドルインストールコマンドは、Railsとはまったく独立しています。あなたのGemfileを見るだけで、上記の設定であなたのアプリケーションが実際に必要とするライブラリは気にしません。実際には、Bundler.requireをスキップし、任意のグループから手動でlibsを要求することができます。私は同意します.RailsはBundlerとこの場合よく統合できますが、そうではありません。 –

+2

私は参照してください。ですから、レールはバンドラ(つまり 'config/application.rb'と' config/boot.rb')を知っていると言うのは公正だと思いますが、バンドラはレールについて何も知らない... Gemfileこれらのファイルは使用しません。私はコインが最終的に落ちたと思う。ご協力いただきありがとうございます! – gingerlime

0

代替ソリューションは、bundle-only ruby gemを使用することです。次のように使用することができます。

> gem install bundle-only 
> bundle-only production 

このライブラリは、あなたのバンドラのコンフィグを汚染したりGemfile.lockを補強しません。それはが提供する組み込みbundle --without every other groupオプションの簡単な代替です。

関連する問題