kann solche Datei nicht laden - Bundler / Setup (LoadError)

128

Ich setze die Rails 4-Anwendung mit Ruby 2.0, erhalte jedoch die Meldung "Webanwendung konnte nicht gestartet werden" und erhalte die folgende Ablaufverfolgung:

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

Meine apache2.conf ist:

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 ist:

Bundler version 1.3.5

ruby -v ist:

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

gem env ist:

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 ist:

/usr/lib/ruby/gems/1.8:/usr/lib/ruby/gems/1.8

Sollte nicht GEM_PATHsein /usr/lib/ruby/gems/2.0?

Innerhalb des virtuellen Hosts in apache2.conf habe ich hinzugefügt:

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

Und jetzt funktioniert es.

Ist es der richtige Weg, dies zu beheben?

Mr_Nizzle
quelle

Antworten:

49

Könnte es sein, dass vor der Installation von 2.0 eine frühere Ruby-Umgebung auf Ihrem System installiert war? Möglicherweise war GEM_PATH vorhanden, das zum Verzeichnis /1.8 führte, das bei der Installation von Version 2.0 einfach beibehalten wurde.

Das Problem, das Sie wahrscheinlich hatten, war, dass Passenger / Apache im Verzeichnis /2.0 suchte, während sich die Edelsteine ​​tatsächlich im Verzeichnis /1.8 befanden. Wenn Sie Apache ausdrücklich anweisen, das Verzeichnis /1.8 zu verwenden, ist es daher sinnvoll, das Problem zu beheben.

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

Sie können auch versuchen, den Ruby-Versions-Manager zu verwenden, um mehrere Ruby-Envs zu verarbeiten.

Einige Dinge, die ich in Google gefunden habe:

robmclarty
quelle
201

Ich hatte fast genau den gleichen Fehler und konnte ihn einfach durch Ausführen vollständig beheben:

gem install bundler

Möglicherweise ist Ihre Bundler-Installation beschädigt oder fehlt - genau das ist in meinem Fall passiert. Beachten Sie, dass Sie Folgendes versuchen können, wenn dies fehlschlägt:

sudo gem install bundler

... aber im Allgemeinen kann man es ohne Sudo machen.

Andrew Faulkner
quelle
2
Das war ich! Frage - ist das sudoeigentlich nötig? Ich habe es benutzt, sudoaber jetzt frage ich mich, was passiert wäre, wenn ich es nicht getan hätte.
Pete
2
Wenn Sie eine andere Version von Ruby als die Systemstandardversion verwenden, müssen Sie diese NICHT verwenden sudo! sudo gem ....installiert die defaultVersion des sudoGems und kann (in meinem Fall Ubuntu 14.04) rvm nicht ausführen.
Farfromunique
1
Auf meinem MacOS-System benötigte ich sudofür das System Standard-Ruby, aber für keine Version von Ruby, die ich mit rvm installiert hatte.
Ben Visness
1
Nur eine Anmerkung, um zu sagen, dass dies die Lösung für mich war, Windows Subsystem für Linux nach dem letzten Windows-Update zu verwenden. Aus irgendeinem Grund hat das Update meine RVM Ruby-Installationen umgehauen.
Ben Fulton
1
Hallo, ich habe das gleiche Problem wie die Frage mit Ubuntu gem 2.7.6und ruby 2.5.0p0was zu tun ist?
TheCrazyProfessor
28

Sie haben höchstwahrscheinlich mehr als einen Ruby installiert.

Wenn Sie RVM verwenden, müssen Sie wahrscheinlich Folgendes ausführen:

rvm use system

um die zu verwendende Version von Ruby einzustellen.

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

ruby -v

teilt Ihnen die Version mit, die Sie gerade verwenden.

Michael Guild
quelle
25

Sie können versuchen zu laufen:

bundle exec rake rails:update:bin

Wie @Dinesh in Rails 5 erwähnt:

rails app:update:bin
zolter
quelle
10

In meinem Fall lauteten die Zeilen, die nach der Installation von Passenger an die Apache-Konfigurationsdatei angehängt wurden, wie folgt:

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

Da für die App Ruby 2.0.0 erforderlich ist, habe ich eine Weile gebraucht, aber schließlich wurde der Fehler behoben, nachdem in der Konfigurationsdatei des virtuellen Apache-Hosts für die App ein anderer Pfad mit 'PassengerRuby' angegeben wurde:

...
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
quelle
Dies war auch bei mir der Fall. In meinem Fall PassengerDefaultRubybezog sich auf eine alte Installation von Rubin.
Waseem
8

Ich habe diesen Fehler in einer neuen Rails-App mit korrekt installiertem Bundle erhalten. Das Problem wurde behoben, indem das Frühlingsjuwel in Gemfile auskommentiert wurde.

Nachbar
quelle
4
Das war es für mich, aber gem install springanstatt es zu kommentieren.
Jakingenberg
3

Ich bin auf dasselbe Problem gestoßen, aber ich denke, es lag am springZwischenspeichern einiger Edelsteine ​​und Konfigurationen. Ich habe es durch Laufen behoben gem pristine --all.

Dadurch werden installierte Gems aus Dateien im Gem-Cache in den ursprünglichen Zustand versetzt.

oder Sie können einfach versuchen, für Ihren Edelstein wie

gem pristine your_gem_name
NM Pennypacker
quelle
1

Dies geschah für mich in der Produktionsumgebung.

rm /vendor/bundle

dann bundle install --deployment

Das Problem wurde behoben.

Vanboom
quelle
1

Andere mögliche Situation: In Ihrer Serverumgebung sind mehrere Benutzer definiert. In diesem Fall läuft

passenger-config --ruby-command

gibt Ihnen den erforderlichen Befehl, um Ihre nginx/sites-enabled/relevant_applicationDatei mit Ihrem Anwendungsfall anzugeben , Beispiel:

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
Hieronymus
quelle
1

Ich hatte das gleiche Problem und versuchte alle Antworten ohne Glück.

Schritte, die ich getan habe, um zu reproduzieren:

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

Allerdings bundle installRails installiert, aber ich habe immer noch cannot load such file -- bundler/setup (LoadError)

endlich laufen gem install rails -v 4.2behoben

Sherif Elkassaby
quelle
1

Die Bundler-Version kann das Problem verursachen.

Bitte installieren Sie den Bundler mit einer anderen Versionsnummer.

Beispielsweise,

gem install bundler -v 1.0.10

hobbydev
quelle
In meinem Fall tritt dieser Fehler nach der Installation von Bundler v2 auf . Ich löse es mit gem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA
0

Ich hatte das, weil etwas Schlimmes in meinem war vendor/bundle. Nichts mit Apache zu tun, nur in der lokalen Entwicklerumgebung.

Um dies zu beheben, habe ich vendor\bundleden Verweis darauf gelöscht und auch in meinem gelöscht , .bundle/configdamit er nicht wiederverwendet wird.

Dann habe ich wieder gebündelt (die dann installiert GEM_HOMEstatt vendor/bundleund das Problem ging weg.

thewoolleyman
quelle
0

HINWEIS: Mein Hosting-Unternehmen ist Site5.com und ich habe einen verwalteten VPS.

Ich habe der .htaccess-Datei in meinem Verzeichnis public_html env-Variablen für GEM_HOME und GEM_PATH hinzugefügt (ein Alias ​​für das öffentliche Verzeichnis in der Rails-App).

Sie wurden vorher nicht benötigt, also muss sich auf der Seite des Gastgebers etwas geändert haben. Dieser Fehler trat auf, nachdem die Datei restart.txt berührt wurde, um den Passagierserver neu zu starten.

Erhielt GEM_PATH von:

echo $ GEM_PATH

Erhielt das GEM_HOME von:

Edelstein 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/

Die .htaccess-Datei wurde mit den folgenden Zeilen aktualisiert:

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
quelle
0

Für mich bestand das Problem darin, RVM Ruby mit Passenger in Verbindung zu bringen. Also musste ich RVM Ruby Wrapper in die Passagierkonfigurationsdatei integrieren.

Ich finde rvm Ruby Wrapper Pfad mit Befehl heraus:

passenger-config --ruby-command

Ich nahm den Pfad aus dem Ergebnis und gab eine Passagierkonfiguration ein in 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
quelle
0

Ich habe dieses Problem behoben, indem ich ein Testschienenprojekt erstellt und alle Edelsteine ​​installiert habe. Dann habe ich mein aktuelles Gemfile.lock durch den Test ersetzt und alles funktioniert einwandfrei.

Ich denke, dass dieses Problem von bundlerVersionen mit Hosting stammt. Stellen Sie daher sicher, dass der Hosting-Bundler dieselbe Version wie Ihr Projekt hat.

hsul4n
quelle
0

In meiner Situation war es eine Frage der Berechtigungen:

 sudo chmod -R +777 <your_folder_path>
petrov
quelle
-1: Legen Sie niemals 777 in Dateien oder Verzeichnisse. Wenn es eine Aufteilung zwischen "Eigentümer", "Gruppe" und "Andere" gibt, liegt dies daran, dass es sich um eine Sicherheitsfrage handelt.
Florian Doyen
0

Die Version der Ruby-Version, für die Phusion Passenger verwendet wurde, unterscheidet sich von Ihrer Rails-App.

<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>

Stellen Sie sicher, dass die Version in httpd config mit der Rails-App identisch ist.

giapnh
quelle