2010-08-19 29 views
7

J'ai une application Rails qui utilise Bundler pour la gestion des dépendances. J'ai ce qui suit dans mon Gemfile:Comment puis-je obtenir des Rails pour exclure certaines gemmes groupées du chargement de plugin?

# default group: 
gem 'json' 

group 'development' do 
    gem 'my_profiler' 
end 

group 'test' do 
    gem 'mocha' 
end 

group 'deployment' do 
    gem 'foo' 
end 

J'appelle Bundler.setup(:default, RAILS_ENV.to_sym) et Bundler.require(:default, RAILS_ENV.to_sym) dans mes initializers.

Le problème est que depuis Bundler met les pierres précieuses dans vendor/bundle/, Rails tous initialise pierres précieuses qui ont un init.rb, pas seulement ceux pour l'environnement actuel. Comment puis-je empêcher Rails de charger automatiquement les init.rb de Foo?

+2

Comme une note, si vous utilisez Bundler, vous devriez probablement utiliser ' Rails.root' au lieu de 'RAILS_ROOT' et' Rails.env' au lieu de 'RAILS_ENV' – tadman

+0

Effacez le fournisseur/bundle/dossier. Ou installez les gemmes dans un gemset rvm et assurez-vous que vous avez bien vos environnements. – thomasfedb

Répondre

1

Quelle version de bundler utilisez-vous? les récentes ne devraient pas installer dans le fournisseur

+0

0.9.26. Pas de moyen immédiat de passer à 1.0 sur cette application. –

+0

Je pense que les anciennes versions supportent --path, donc bundle install --path different/location devrait fonctionner –

11

Vous pouvez utiliser le drapeau --without pour exclure les environnements

$ bundle install --without development test 

http://gembundler.com/groups.html

+0

Ce n'est pas que _bundler_ charge les gems; c'est que Rails est en train de migrer dans le répertoire du fournisseur et de les traiter comme des plugins gem-plugins. Les versions ultérieures de Bundler ne placent pas de gems dans le répertoire du fournisseur. –