impossible de charger un tel fichier - bundler / setup (LoadError)

128

Je configure l'application Rails 4 avec Ruby 2.0, mais j'obtiens "L'application Web n'a pas pu ê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

Ne devrait pas l' GEM_PATHê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, cela fonctionne.

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

Mr_Nizzle
la source

Réponses:

49

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

Le problème que vous aviez probablement, alors, était que Passenger / Apache cherchait dans le répertoire /2.0 alors qu'en fait les gemmes étaient dans le répertoire /1.8. Il est donc logique de dire explicitement à Apache d'utiliser le répertoire /1.8 pour résoudre le problème.

SetEnv GEM_HOME /usr/lib/ruby/gems/1.8

Vous pouvez également essayer d'utiliser le gestionnaire de versions Ruby pour gérer plusieurs envs Ruby.

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

robmclarty
la source
202

J'ai eu presque exactement la même erreur et j'ai pu la corriger complètement simplement en exécutant:

gem install bundler

Il est possible que votre installation de bundler 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.

Andrew Faulkner
la source
2
C'était moi! Question - est-ce sudovraiment nécessaire? Je l'ai utilisé sudomais maintenant je me demande ce qui se serait passé si je ne l'avais pas fait.
Pete
2
Si vous utilisez une version de Ruby différente de celle par défaut du système, vous ne devez PAS l'utiliser sudo! sudo gem ....installera la defaultversion du gem, et (dans mon cas, Ubuntu 14.04) sudone peut pas exécuter rvm.
Farfromunique
1
Sur mon système macOS, j'avais besoin sudodu ruby ​​par défaut du système, mais je n'en avais besoin pour aucune version de ruby ​​que j'ai installée avec rvm.
Ben Visness
1
Juste une note pour dire que c'était la solution pour moi en utilisant le sous-système Windows pour Linux, après la récente mise à jour de Windows. Pour une raison quelconque, la mise à jour a époustouflé mes installations RVM ruby.
Ben Fulton
1
Salut, j'ai le même problème que la question utilisant ubuntu avec gem 2.7.6et ruby 2.5.0p0que faire?
TheCrazyProfessor
28

Vous avez probablement plus d'un Ruby installé.

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

rvm use system

pour définir la version de ruby ​​à utiliser.

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

ruby -v

vous indiquera la version que vous utilisez actuellement.

Michael Guild
la source
25

Vous pouvez essayer d'exécuter:

bundle exec rake rails:update:bin

Comme @Dinesh l'a mentionné dans Rails 5:

rails app:update:bin
Zolter
la source
10

Dans mon cas, les lignes ajoutées au fichier de configuration apache après l'installation de passager étaient 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, cela m'a donc 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...
user2997993
la source
C'était également le cas avec moi. Dans mon cas, il PassengerDefaultRubyfaisait référence à une ancienne installation de rubis.
Waseem le
8

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

nachbar
la source
4
C'était tout pour moi mais gem install springau lieu de commenter.
jakenberg
3

J'ai rencontré le même problème, mais je pense que c'était dû à la springmise en cache de certaines gemmes et configurations. Je l'ai réparé en courant gem pristine --all.

Cela restaure les gemmes installées en parfait état à partir des fichiers situés dans le cache de gemmes.

ou vous pouvez simplement essayer votre bijou comme

gem pristine your_gem_name
NM Pennypacker
la source
1

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

rm /vendor/bundle

puis bundle install --deployment

résolu le problème.

vanboom
la source
1

Autre situation possible: vous avez plusieurs utilisateurs définis dans votre environnement serveur. Dans ce cas, courir

passenger-config --ruby-command

vous donnera la commande nécessaire pour spécifier votre nginx/sites-enabled/relevant_applicationfichier 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
Jérôme
la source
1

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 installinstallé Rails, mais j'ai toujours cannot load such file -- bundler/setup (LoadError)

enfin courir l'a gem install rails -v 4.2corrigé

Sherif Elkassaby
la source
1

La version du bundler peut être à l'origine du problème.

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

Par exemple,

bundler d'installation gem -v 1.0.10

hobbydev
la source
Dans mon cas, cette erreur se produit après l'installation du bundler v2 . Je le résous avec gem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA
0

J'avais ça parce que quelque chose de mauvais était dans mon vendor/bundle. Rien à voir avec Apache, juste dans l'environnement de développement local.

Pour corriger, j'ai supprimé vendor\bundleet également supprimé la référence à celui-ci dans mon .bundle/configafin qu'il ne soit pas réutilisé.

Ensuite, j'ai ré-groupé (qui a ensuite été installé à la GEM_HOMEplace de vendor/bundleet le problème a disparu.

thewoolleyman
la source
0

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

J'ai ajouté des variables d'environnement pour GEM_HOME et GEM_PATH au fichier .htaccess dans mon répertoire public_html (un alias vers le répertoire public dans l'application rails)

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

Obtenu GEM_PATH par:

echo $ GEM_PATH

Vous avez obtenu 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/
Rob Little
la source
0

Pour moi, le problème était d'associer RVM Ruby à Passenger. J'avais donc besoin d'intégrer le wrapper RVM ruby ​​au fichier de configuration des passagers.

Je trouve le chemin du wrapper rvm ruby ​​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;
Gediminas
la source
0

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

Je pense que ce problème de bundler versions avec hébergement, alors assurez-vous que le bundler d'hébergement est la même version que votre projet.

hsul4n
la source
0

Dans ma situation, c'était une question d'autorisations:

 sudo chmod -R +777 <your_folder_path>
Petrov
la source
-1: ne mettez jamais 777 sur des fichiers ou des répertoires. S'il y a une séparation entre «propriétaire», «groupe» et «autres», c'est parce que c'est une question de sécurité.
Florian Doyen le
0

La version de la version ruby ​​utilisée par le passager phusion est différente de celle de votre application rails.

<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/passenger-6.0.2
  PassengerDefaultRuby /usr/local/rbenv/versions/2.5.3/bin/ruby
</IfModule>

Assurez-vous que la version sur la configuration httpd est la même avec l'application rails.

Giapnh
la source