Bundler essayer d'installer de manière incorrecte groupe « développement » et « tester » des pierres précieuses dans la production

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

Question

J'ai une petite application web qui utilise un tas de pierres précieuses. Certains d'entre eux ne sont utilisés que pour les environnements test et development. Maintenant, quand je tente de démarrer licorne sur le serveur de production en utilisant la commande suivante, il échoue.

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

L'erreur que je vois dans les fichiers journaux est:

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

J'ai collé mon Gemfile ci-dessous:

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 est censé détecter le bon environnement et ignorer les autres pierres précieuses, non? En ce moment, je supprime toutes les lignes qui ne sont pas dans le groupe par défaut sur le serveur pour obtenir ce travail, mais c'est une bidouille horrible.

Était-ce utile?

La solution

Après beaucoup de creuser, j'ai trouvé la solution à ce problème. Tout ce que je devais faire a été exécuté bundle install --without development test avant de démarrer le serveur. Cela ajoute un fichier .bundle/config dans les rails racine avec la ligne BUNDLE_WITHOUT: test:development. Maintenant, chaque fois que vous exécutez bundle install ou démarrez le serveur, il va ignorer ces groupes.

De la documentation

  

Le Bundler CLI vous permet de spécifier   une liste des groupes dont les pierres précieuses paquet   installer ne devrait pas installer le   --without. Pour spécifier plusieurs groupes à ignorer, spécifier une liste de   groupes séparés par des espaces.

     

paquet installer faisceau de tests --without   installer test de développement --without   Après paquet en cours d'exécution installer --without   test, Bundler se souviendra que vous   exclus du groupe de test dans le dernier   installation. La prochaine fois que vous exécutez   bundle installer, sans --without   option Bundler se rappeler.

     

En outre, appelant Bundler.setup sans   paramètres, ou les appels nécessitent   "Bundler / setup" configure tous les groupes   sauf ceux vous avez exclus par   --without (car ils ne sont évidemment pas disponibles).

Autres conseils

Dans mon cas, il installait des pierres précieuses de jenkins env. Donc, je devais mettre ma propre variable bundle_without à 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]

Vous n'avez pas défini un groupe de production =)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top