Bundler essayer d'installer de manière incorrecte groupe « développement » et « tester » des pierres précieuses dans la production
-
09-10-2019 - |
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.
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.
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 =)