46 votes

Rails 3: le passager ne trouve pas les gem git installés par le bundler

Rails 3.0.0, Passager 2.2.15:

  • Créer un nouveau Rails de projet
  • Ajouter gem 'paperclip', :git => 'git://github.com/lmumar/paperclip.git', :branch => 'rails3' à votre Gemfile
  • N' bundle install
  • Tout est OK, en commençant par rails/script server & accès fonctionne aussi
  • Cependant, lors de l'accès avec le Passager, il dit:

git://github.com/lmumar/trombone.git (à rails3) n'est pas vérifiée. S'il vous plaît exécuter bundle install (Bundler::GitError)

J'ai essayé bundler pack (n'aide pas) et la mise en BUNDER_HOME à ~/.bundler (le Trombone git est installé là, en bundler install) dans le .htaccess et divers endroits dans config/*.rb, mais ce n'était pas de succès, trop.

~/.bundler est détenue par le même utilisateur que les Rails de projet (Passager s'exécute sous cet utilisateur), donc il ne peut pas être un problème de permission. sudo est installé par l' bundle install.

Tous les conseils?

70voto

Roberto Points 794

J'avais l'habitude d'avoir ce problème, résoudre en utilisant

 bundle --deployment
 

Qui va installer les gemmes dans vendeur / bundle

22voto

junique Points 506

Solution (m'a pris quelques heures):

Je suis sûr que RAILS_ROOT/.bundle/config (SetEnv, etc. n'a pas fonctionné pour moi) contient:

 --- 
BUNDLE_PATH: /home/xxxxx/.bundler
 

Remarque BUNDLE_PATH, pas BUNDLER_PATH! Il y avait aussi une entrée DISABLED_SHARED_GEMS = 1, je l'ai supprimée.

Ensuite, l’emballeur reconnaît le bon chemin même lorsqu’il est chargé depuis le passager. Sans passager, cela fonctionnait toujours (et utilisait /home/xxxxx/.bundler, comme indiqué dans la question)

8voto

indirect Points 1910

Vous pouvez utiliser bundle install --path vendor/bundle pour installer les gems localement, plutôt que dans les gems système.

Toutefois, si vous souhaitez continuer à utiliser les gems système, la configuration d'Apache indiquant votre passager n'est qu'une seule ligne pour indiquer à Passenger où trouver vos gems système:

 SetEnv GEM_HOME /Users/bob/.bundle
 

Il existe une écriture un peu plus élaborée sur mon blog à l' aide de l'ensemble Passage avec GEM_HOME.

4voto

declan Points 2709

J'ai rencontré ce problème lors de l'écriture d'une application Sinatra. Pour le résoudre, j'ai ajouté cette ligne à config.ru .

 require 'bundler/setup'
 

0voto

Code-Source Points 902

J'ai eu le même problème et c'était en raison d'une question de droits avec RVM.

L'utilisateur qui exécute le serveur Web ne peut pas vérifier si GIT gem est disponible. En tant que "Passager" utilisant l'utilisateur Web pour exécuter, il ne peut pas faire cette vérification.

La solution que j'ai trouvée consistait à ajouter un utilisateur Web au groupe rvm:

 usermod -a -G rvm apache
 

J'espère que cela aidera d'autres personnes qui ne souhaitent pas que GEM soit déployé dans "vendor / bundle".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X