web-dev-qa-db-fra.com

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 projet Rails
  • Ajoutez gem 'Paperclip', :git => 'git://github.com/lmumar/Paperclip.git', :branch => 'Rails3'à votre Gemfile
  • Faire bundle install
  • Tout va bien, à partir de Rails/script server et accéder fonctionne aussi
  • Cependant, lors de l'accès avec Passenger, il est indiqué:

git: //github.com/lmumar/Paperclip.git (sur Rails3) n'est pas extrait. Veuillez exécuter bundle install (Bundler :: GitError)

J'ai essayé bundler pack (ne m'aide pas) et paramétré BUNDER_HOME à ~/.bundler (le git Paperclip est installé ici par bundler install) dans le fichier .htaccess et à divers endroits dans config/*. Rb, mais cela n'a pas réussi. .

~/.bundler appartient au même utilisateur que le projet Rails (Passenger s'exécute sous cet utilisateur), il ne peut donc s'agir d'un problème d'autorisation. Sudo est installé et appelé par bundle install.

Des allusions?

45
junique

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)

22
junique

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

bundle --deployment

Qui va installer les gemmes dans vendeur/bundle

69
Roberto

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 est une seule ligne pour indiquer à Passenger où trouver vos gems système:

SetEnv GEM_HOME /Users/bob/.bundle

Il y a une écriture un peu plus élaborée sur mon blog à Utilisation de Passenger avec l'ensemble GEM_HOME

8
indirect

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'
4
declan

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 s’exécuter, il ne peut pas effectuer 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".

0
Code-Source

J'ai installé la gemme passager et son module Apache en tant qu'utilisateur de Sudo et c'était le problème dans mon cas. 

La raison pour laquelle j’ai utilisé Sudo au départ, c’est que j’ai copié le code de l’épisode 122 de railscasts. Son installation sans accès sodu a résolu ce problème. Depuis que Ruby a été installé en utilisant rvm sans l’accès Sudo sur mon système.

0
Rishinder