Railsバンドルインストールプロダクションのみ


87

私はまだrails / ruby​​ / bundlerに不慣れで、少し混乱しています。

私たちのconfig/application.rbファイルには、次のバンドラーセグメントがあります。

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)すると、開発/テストグループからgemがインストールされます...

なぜこれが発生するのですか、またはこれを適切に機能させるにはどうすればよいですか?

回答:


181

--withoutオプションを見てください:

bundle install --without development test

デフォルトでは、Bundlerはすべてのgemをインストールし、アプリケーションは必要なgemを使用します。Bundler自体は、Railsと現在の環境について何も知りません。


3
私は知っ--withoutていますが、特にconfig/application.rb(これに正確に対処することになっている)の構成ディレクティブとこの引用を考慮すると、非常にエレガントではないようです:Rails3はbundleでサポートされています。
ジンジャーライム2012

2
バンドルインストールコマンドは、Railsから完全に独立しています。Gemfileを調べるだけで、アプリケーションが上記の構成で実際に必要とするライブラリは関係ありません。実際、Bundler.requireをスキップして、任意のグループから手動でライブラリを要求できます。この場合、RailsはBundlerとより適切に統合できることに同意しますが、そうではありません。
Simon Perepelitsa 2012

2
そうですか。したがって、railsはbundleについて知っていると言っても過言ではありませんが(つまり、inconfig/application.rbともconfig/boot.rb)、bundleはrailsについて何も知りません... Gemfileを読み取るだけで、それらのrailsファイルは使用しません。ついにコインが落ちたと思います。ご協力いただきありがとうございます!
ジンジャーライム2012年

実際、これは、Railsアプリの環境ではなく、Gemfileの「グループ」を除外しているためエレガントに見えます。私はこれが言われていることを知っていますが、私がそれをこのように考えたとき、それは私にとってより理にかなっています。
jaydel 2016

1
これが過去4年間に変更されたものであるかどうかはわかりませんが、引数はスペースではなくsで--without区切ることになって:います。だから私はそれがすべきだと信じていますbundle install --without development:test
ジョーフリーマン

2

別の解決策は、bundle-onlyrubygemを使用することです。次のように使用できます。

> gem install bundle-only
> bundle-only production

このライブラリは、バンドラーの構成や拡張を汚染しませんGemfile.lock。これは、提供する組み込みbundle --without every other groupオプションの単純な代替手段bundlerです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.