Bundler in modo non corretto tenta di installare “sviluppo” e “test” gemme di gruppo in produzione

StackOverflow https://stackoverflow.com/questions/4438601

Domanda

Ho una piccola applicazione web, che utilizza un gruppo di gemme. Alcuni di essi sono utilizzati solo per ambienti test e development. Ora, quando provo ad iniziare unicorno sul server di produzione utilizzando il seguente comando, non riesce.

unicorn_rails -E production -D -c config/unicorn.rb

L'errore che vedo nei file di log è:

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`.

Ho incollato il mio Gemfile di seguito:

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

Bundler dovrebbe rilevare il giusto ambiente e ignorare le altre gemme, giusto? In questo momento, sto Eliminazione di tutte le linee che non sono nel gruppo di default sul server per ottenere questo lavoro, ma questo è un brutto hack.

È stato utile?

Soluzione

Dopo un sacco di scavare ho trovato la correzione di questo problema. Tutto quello che dovevo fare era gestito bundle install --without development test prima di avviare il server. Questo aggiunge un file nella root .bundle/config rotaie con la linea BUNDLE_WITHOUT: test:development. Ora ogni volta che si esegue bundle install o avviare il server che sarà ignorare quei gruppi.

Dalla documentazione

  

Il Bundler CLI consente di specificare   un elenco dei gruppi cui gemme fascio   l'installazione non dovrebbe installare con la   opzione --without. Per specificare più gruppi di ignorare, specificare un elenco di   gruppi separati da spazi.

     

bundle install --without fascio di prova   installazione di test di sviluppo --without   Dopo aver eseguito bundle install --without   prova, bundler ricorderà che si   escluso il gruppo di test nel corso dell'ultimo   installazione. La prossima volta che si esegue   fascio installare, senza --without   opzione, bundler sarà richiamarlo.

     

Inoltre, chiamando Bundler.setup senza   parametri, o chiamata richiedono   gruppi "bundler / setup" Il programma di installazione tutto   Fatta eccezione per quelli che si esclusi via   --without (dal momento che non sono ovviamente disponibili).

Altri suggerimenti

Nel mio caso si stava installando gemme da Jenkins Env. Così ho dovuto impostare il mio variabile bundle_without a Capistrano.

Gemfile

group :test, :development, :jenkins do  
  gem 'test-unit', '1.2.3'  
  gem 'rspec-rails'
end

deploy.rb

set :bundle_without, [:development, :test, :jenkins]

Non è stato definito un gruppo di produzione =)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top