web-dev-qa-db-fra.com

ne peut pas charger un tel fichier - bundler / setup (LoadError)

Je configure Rails 4 application avec Ruby 2.0, mais j'obtiens "L'application Web ne peut pas être démarrée" et j'obtiens cette trace:

cannot load such file -- bundler/setup (LoadError)
  /usr/local/lib/Ruby/site_Ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/local/lib/Ruby/site_Ruby/2.0.0/rubygems/core_ext/kernel_require.rb:53:in `require'
  /usr/lib/Ruby/gems/1.8/gems/passenger-4.0.19/lib/phusion_passenger/loader_shared_helpers.rb:212:in `run_load_path_setup_code'
  /usr/lib/Ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:96:in `preload_app'
  /usr/lib/Ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:150:in `<module:App>'
  /usr/lib/Ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:29:in `<module:PhusionPassenger>'
  /usr/lib/Ruby/gems/1.8/gems/passenger-4.0.19/helper-scripts/rack-preloader.rb:28:in `<main>'

Mon Apache2.conf est:

LoadModule passenger_module /usr/lib/Ruby/gems/1.8/gems/passenger-4.0.19/buildout/Apache2/mod_passenger.so
   PassengerRoot /usr/lib/Ruby/gems/1.8/gems/passenger-4.0.19
   PassengerDefaultRuby /usr/local/bin/Ruby

bundle -v est:

Bundler version 1.3.5

Ruby -v est:

Ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux]

gem env est:

RubyGems Environment:
  - RUBYGEMS VERSION: 2.1.5
  - Ruby VERSION: 2.0.0 (2013-06-27 patchlevel 247) [x86_64-linux]
  - INSTALLATION DIRECTORY: /usr/lib/Ruby/gems/1.8
  - Ruby EXECUTABLE: /usr/local/bin/Ruby
  - EXECUTABLE DIRECTORY: /usr/lib/Ruby/gems/1.8/bin
  - SPEC CACHE DIRECTORY: /root/.gem/specs
  - RUBYGEMS PLATFORMS:
    - Ruby
    - x86_64-linux
  - GEM PATHS:
     - /usr/lib/Ruby/gems/1.8
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - Shell PATH:
     - /root/.gems/bin
     - /usr/lib/Ruby/gems/1.8/bin/
     - /usr/local/bin
     - /usr/bin
     - /bin
     - /usr/bin/X11
     - /usr/games
     - /usr/sbin
     - /sbin

echo $GEM_PATH est:

/usr/lib/Ruby/gems/1.8:/usr/lib/Ruby/gems/1.8

GEM_PATH ne devrait-il pas être /usr/lib/Ruby/gems/2.0?

À l'intérieur de l'hôte virtuel dans Apache2.conf, j'ai ajouté:

SetEnv GEM_HOME /usr/lib/Ruby/gems/1.8

Et maintenant ça marche.

Est-ce la bonne façon de résoudre ce problème?

114
Mr_Nizzle

Il se peut qu’un précédent Ruby env ait été installé sur votre système avant l’installation de la version 2.0? Cela aurait pu avoir un GEM_PATH existant qui mène au répertoire /1.8 que l’installation de la version 2.0 a simplement gardé.

Le problème que vous aviez probablement, alors, était que Passenger/Apache cherchait dans le répertoire /2.0 alors que les gemmes se trouvaient dans le répertoire /1.8. Votre demande explicite à Apache d'utiliser le répertoire /1.8 a donc du sens pour résoudre le problème.

SetEnv GEM_HOME /usr/lib/Ruby/gems/1.8

Vous pouvez également essayer d'utiliser Ruby Version Manager pour gérer plusieurs envois Ruby.

Certaines choses que j'ai trouvées dans Google:

49
robmclarty

J'ai eu presque exactement la même erreur, et j'ai pu résoudre ce problème simplement en lançant:

gem install bundler

Il est possible que votre installation de bundle soit corrompue ou manquante - c'est ce qui s'est passé dans mon cas. Notez que si ce qui précède échoue, vous pouvez essayer:

Sudo gem install bundler

... mais généralement vous pouvez le faire sans Sudo.

170
Andrew Faulkner

Il est fort probable que plusieurs Ruby soient installés.

Si vous utilisez RVM, vous devez probablement exécuter:

rvm use system

définir la version de Ruby à utiliser.

Voir http://rvm.io/rubies/default

Ruby -v

vous dira la version que vous utilisez actuellement.

27
Michael Guild

Vous pouvez essayer de courir:

bundle exec rake Rails:update:bin

Comme @Dinesh mentionné dans Rails 5:

Rails app:update:bin
23
zolter

Dans mon cas, les lignes ajoutées au fichier de configuration Apache après l’installation de passagers sont les suivantes:

LoadModule passenger_module /usr/lib/Ruby/gems/1.8/gems/passenger-.0.24/buildout/Apache2/mod_passenger.so 
PassengerRoot /usr/lib/Ruby/gems/1.8/gems/passenger-4.0.24 
PassengerDefaultRuby /usr/bin/Ruby1.8

Mais l'application nécessite Ruby 2.0.0, donc cela m'a pris un certain temps, mais finalement, l'erreur a été résolue après avoir spécifié un chemin différent à l'aide de 'PassengerRuby' ci-dessous, dans le fichier de configuration de l'hôte virtuel Apache pour l'application:

...
VirtualHost *:80>
  ServerName www.yourhost.com

 **PassengerRuby /home/user/.rvm/gems/Ruby-2.0.0-p247**
  # !!! Be sure to point DocumentRoot to 'public'!
  DocumentRoot /somewhere/public    
  <Directory /somewhere/public>
     # This relaxes Apache security settings.
     AllowOverride all
     # MultiViews must be turned off.
     Options -MultiViews
  </Directory>
</VirtualHost...
9
user2997993

J'ai eu cette erreur dans une nouvelle application Rails avec bundle correctement installé. Commenter la gemme de printemps dans Gemfile a résolu le problème.

8
nachbar

j'ai eu le même problème et j'ai essayé toutes les réponses sans aucune chance.

étapes que j'ai faites pour reproduire:

  1. rvm instal 2.1.10
  2. rvm gemset create my_gemset
  3. rvm use 2.1.10@my_gemset
  4. bundle install

cependant bundle install a installé Rails, mais j'ai toujours cannot load such file -- bundler/setup (LoadError)

enfin en cours d'exécution gem install Rails -v 4.2 corrigé

1
Sherif Elkassaby

J'ai rencontré le même problème, mais je pense que c'était à cause de spring la mise en cache de gemmes et de configurations. Je l'ai corrigé en exécutant gem pristine --all.

Cela restaure les gemmes installées dans un état impeccable à partir des fichiers situés dans le cache des gemmes.

1
NM Pennypacker

NOTE: Mon hébergeur est Site5.com et j'ai un VPS géré.

J'ai ajouté des variables env pour GEM_HOME et GEM_PATH au fichier .htaccess de mon répertoire public_html (un alias du répertoire public de l'application Rails).

Ils n'étaient pas nécessaires auparavant, alors quelque chose a dû changer du côté des hôtes. Il a eu cette erreur après avoir touché le fichier restart.txt pour redémarrer le serveur de passagers.

GEM_PATH obtenu par:

echo $ GEM_PATH

Vous avez le GEM_HOME par:

bijou env

 RubyGems Environment:
   - RUBYGEMS VERSION: 2.0.14
   - Ruby VERSION: 2.0.0 (2013-11-22 patchlevel 353) [x86_64-linux]
   - INSTALLATION DIRECTORY: /home/username/Ruby/gems
   - Ruby EXECUTABLE: /usr/local/Ruby20/bin/Ruby
   - EXECUTABLE DIRECTORY: /home/username/Ruby/gems/bin
   - RUBYGEMS PLATFORMS:
     - Ruby
     - x86_64-linux
   - GEM PATHS:
      - /home/username/Ruby/gems
      - /usr/local/Ruby2.0/lib64/Ruby/gems/
   - GEM CONFIGURATION:
      - :update_sources => true
      - :verbose => true
      - :backtrace => false
      - :bulk_threshold => 1000
      - "gem" => "--remote --gen-rdoc --run-tests"
      **- "gemhome" => "/home/username/Ruby/gems"**
      - "gempath" => ["/home/username/Ruby/gems", "/usr/local/Ruby2.0/lib64/Ruby/gems/"]
      - "rdoc" => "--inline-source --line-numbers"
   - REMOTE SOURCES:
      - https://rubygems.org/

Fichier .htaccess mis à jour avec les lignes suivantes:

SetEnv GEM_HOME /usr/local/Ruby2.0/lib64/Ruby/gems/
SetEnv GEM_PATH /home/username/Ruby/gems:/usr/local/Ruby20/lib64/Ruby/gems/:/home/username/Ruby/gems:/usr/
0
Rob Little

Version Bundler peut-être causer le problème.

Veuillez installer le bundler avec un autre numéro de version.

Par exemple,

gem install bundler -v 1.0.10

0
hobbydev

Autre situation possible: plusieurs utilisateurs sont définis dans votre environnement de serveur. Dans ce cas, en cours d'exécution

passenger-config --Ruby-command

vous donnera la commande nécessaire pour spécifier votre fichier nginx/sites-enabled/relevant_application avec votre cas d'utilisation, exemple:

passenger-config was invoked through the following Ruby interpreter:
Command: /home/other_user/.rbenv/versions/2.4.5/bin/Ruby
Version: Ruby 2.4.5p335 (2018-10-18 revision 65137) [x86_64-linux]
To use in Apache: PassengerRuby /home/other_user/.rbenv/versions/2.4.5/bin/Ruby
To use in Nginx : passenger_Ruby /home/other_user/.rbenv/versions/2.4.5/bin/Ruby
To use with Standalone: /home/other_user/.rbenv/versions/2.4.5/bin/Ruby /usr/bin/passenger start
0
Jerome

Pour moi, le problème était d’associer RVM Ruby à Passenger. Il me fallait donc intégrer RVM Ruby wrapper au fichier de configuration du passager.

Je découvre rvm Ruby chemin du wrapper avec la commande:

passenger-config --Ruby-command

J'ai pris le chemin du résultat et suis entré dans une configuration de passager dans nginx/passenger.conf:

passenger_root /usr/lib/Ruby/vendor_Ruby/phusion_passenger/locations.ini;
passenger_Ruby /usr/local/rvm/gems/Ruby-2.3.1/wrappers/Ruby;
0
Gediminas

J'avais ceci parce que quelque chose de mauvais était dans mon vendor/bundle. Rien à voir avec Apache, juste en développement local env.

Pour résoudre ce problème, j'ai supprimé vendor\bundle, ainsi que la référence à celle-ci dans mon .bundle/config afin qu'il ne soit pas réutilisé.

Ensuite, j'ai ré-empaqueté (qui a ensuite installé GEM_HOME au lieu de vendor/bundle et le problème a disparu.

0
thewoolleyman

Cela se passait dans l'environnement de production pour moi.

rm /vendor/bundle

alors bundle install --deployment

résolu le problème.

0
vanboom

J'ai résolu ce problème en créant test Rails projet et en installant toutes les gemmes, puis j'ai remplacé mon fichier Gemfile.lock actuel par le test et tout fonctionne correctement.

Je pense que ce problème provient de bundler versions avec hébergement. Assurez-vous donc que le bundle d’hébergement est la même version que votre projet.

0
7uthaifah

Dans ma situation, il s'agissait des autorisations:

 Sudo chmod -R +777 <your_folder_path>
0
petrov