バンドラーは、生産中に「開発」と「テスト」グループの宝石を誤ってインストールしようとしています
-
09-10-2019 - |
質問
たくさんの宝石を使用する小さなWebアプリがあります。それらのいくつかは使用されるだけです test
と development
環境。さて、次のコマンドを使用して生産サーバーでUnicornを起動しようとすると、失敗します。
unicorn_rails -E production -D -c config/unicorn.rb
ログファイルに表示されるエラーは次のとおりです。
Refreshing Gem list
Could not find gem 'spork (>= 0.9.0.rc2, runtime)' in any of the gem sources listed in your Gemfile.
Try running `bundle install`.
私は私のgemfileを下に貼り付けました:
source 'http://rubygems.org'
gem 'rails', '3.0.1'
gem 'unicorn'
gem 'mongoid', '>= 2.0.0.beta.19'
gem 'devise'
gem 'cancan'
gem 'haml', '>= 3.0.0'
gem 'bson'
gem 'bson_ext'
gem 'formtastic'
gem 'bluecloth'
group :production do
gem 'capistrano'
end
group :development do
gem 'haml-rails'
gem 'hpricot', '0.8.2'
gem 'ruby_parser', '2.0.5'
gem 'less'
gem 'rspec-rails', '>= 2.0.1'
end
group :development,:test do
gem 'spork', '>=0.9.0.rc2'
gem 'mongoid-rspec'
end
group :test do
gem 'factory_girl_rails'
gem 'autotest'
gem 'cucumber-rails'
gem 'cucumber'
gem 'capybara'
gem 'shoulda'
gem 'database_cleaner'
gem 'test_notifier'
gem 'rspec', '2.0.1'
gem 'launchy'
end
バンドラーは、適切な環境を検出し、他の宝石を無視することになっていますよね?現在、私はこれを機能させるためにサーバー上のデフォルトグループにないすべての行を削除していますが、それはugいハッキングです。
解決
たくさんの掘り出しの後、私はこの問題の修正を見つけました。私がしなければならなかったのは走ることだけでした bundle install --without development test
サーバーを起動する前。これはaを追加します .bundle/config
ラインでRailsルートにファイル BUNDLE_WITHOUT: test:development
。今、あなたが走るときはいつでも bundle install
またはサーバーを起動すると、それらのグループが無視されます。
Bundler CLIを使用すると、GEMSバンドルインストールが - オプションなしでインストールされないグループのリストを指定できます。無視する複数のグループを指定するには、スペースで区切られたグループのリストを指定します。
バンドルインストール - テスト付きバンドルインストールなし - バンドルインストールを実行した後の開発テスト - テストなしで、バンドラーは、前回のインストールでテストグループを除外したことを覚えています。次回、バンドルインストールを実行すると、オプションがなくても、バンドラーはそれを思い出します。
また、パラメーターなしでbundler.setupを呼び出すか、「バンドラー/セットアップ」を要求する必要があります。
他のヒント
私の場合、それはJenkins Envから宝石をインストールしていました。そのため、Capistranoで変数を使用して自分のbundle_を設定する必要がありました。
gemfile
group :test, :development, :jenkins do
gem 'test-unit', '1.2.3'
gem 'rspec-rails'
end
deploy.rb
set :bundle_without, [:development, :test, :jenkins]
生産グループを定義していません=)