impossibile caricare tale file - bundler / setup (LoadError)


128

Sto impostando l'applicazione Rails 4 con Ruby 2.0, ma sto ottenendo "Impossibile avviare l'applicazione Web" e ottengo questa traccia:

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

Il mio apache2.conf è:

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

Bundler version 1.3.5

ruby -v è:

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

gem env è:

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

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

Non dovrebbe GEM_PATHessere /usr/lib/ruby/gems/2.0?

All'interno dell'host virtuale in apache2.conf ho aggiunto:

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

E ora funziona.

È il modo giusto per risolvere questo problema?

Risposte:


49

È possibile che sia stato installato un env Ruby precedente sul sistema prima dell'installazione di 2.0? Ciò avrebbe potuto avere un GEM_PATH esistente che portava alla directory /1.8 che l'installazione della versione 2.0 manteneva semplicemente.

Il problema che probabilmente hai avuto, quindi, era che Passenger / Apache stava cercando nella directory /2.0 quando in realtà le gemme erano nella directory /1.8. Dice esplicitamente ad apache di usare la directory /1.8 quindi ha senso risolvere il problema.

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

Potresti anche provare a utilizzare Ruby Version Manager per gestire più envs di Ruby.

Alcune cose che ho trovato su Google:


202

Ho avuto quasi esattamente lo stesso errore ed è stato in grado di risolverlo completamente semplicemente eseguendo:

gem install bundler

È possibile che l'installazione del tuo bundler sia corrotta o mancante - è quello che è successo nel mio caso. Si noti che se quanto sopra fallisce puoi provare:

sudo gem install bundler

... ma generalmente puoi farlo senza sudo.


2
Questo ero io! Domanda: è sudodavvero necessario? L'ho usato sudoma ora mi chiedo cosa sarebbe successo se non l'avessi fatto.
Pete,

2
Se stai utilizzando una versione diversa di Ruby rispetto all'impostazione predefinita del sistema, NON devi utilizzare sudo! sudo gem ....installerà la defaultversione della gemma e (nel mio caso Ubuntu 14.04) sudonon può eseguire rvm.
Farfromunique,

1
Sul mio sistema macOS, avevo bisogno sudodel ruby ​​predefinito di sistema, ma non ne avevo bisogno per nessuna versione di ruby ​​che ho installato con rvm.
Ben Visness,

1
Solo una nota per dire che questa è stata la soluzione per me utilizzando il sottosistema Windows per Linux, dopo il recente aggiornamento di Windows. Per qualche motivo l'aggiornamento ha spazzato via le mie installazioni ruby ​​RVM.
Ben Fulton,

1
Ciao, ho lo stesso problema della domanda che utilizza Ubuntu con gem 2.7.6e ruby 2.5.0p0cosa fare?
TheCrazyProfessor

28

Molto probabilmente hai installato più di un Ruby.

Se stai usando RVM, probabilmente devi eseguire:

rvm use system

per impostare la versione di ruby ​​da usare.

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

ruby -v

ti dirà la versione che stai attualmente utilizzando.


25

Puoi provare a eseguire:

bundle exec rake rails:update:bin

Come @Dinesh menzionato in Rails 5:

rails app:update:bin

10

Nel mio caso, le linee aggiunte al file di configurazione di Apache dopo l'installazione del passeggero erano le seguenti:

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

Ma l'app richiede Ruby 2.0.0, quindi mi ci è voluto un po 'ma alla fine l'errore è stato risolto dopo aver specificato un percorso diverso usando' PassengerRuby 'di seguito, all'interno del file di configurazione dell'host virtuale Apache per l'app:

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

Questo è stato il caso anche per me. Nel mio caso PassengerDefaultRubysi riferiva a una vecchia installazione di rubini.
Waseem,

8

Ho riscontrato questo errore in una nuova app Rails con il pacchetto installato correttamente. Commentare la gemma di primavera in Gemfile ha risolto il problema.


4
Questo è stato per me, ma gem install springinvece di commentare.
Jakenberg il

3

Ho riscontrato lo stesso problema, ma penso sia dovuto alla springmemorizzazione nella cache di alcune gemme e configurazioni. L'ho risolto correndo gem pristine --all.

Ciò ripristina le gemme installate allo stato originario dai file che si trovano nella cache gem.

o puoi semplicemente provare per il tuo gioiello come

gem pristine your_gem_name

1

Questo stava accadendo nell'ambiente di produzione per me.

rm /vendor/bundle

poi bundle install --deployment

risolto il problema.


1

Altra possibile situazione: hai più utenti definiti nel tuo ambiente server. In tal caso, in esecuzione

passenger-config --ruby-command

ti darà il comando necessario per specificare il tuo nginx/sites-enabled/relevant_applicationfile con il tuo caso d'uso, ad esempio:

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

1

ho avuto lo stesso problema e ho provato tutte le risposte senza fortuna.

passaggi che ho fatto per riprodurre:

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

però bundle install ho installato Rails, ma ho ancora cannot load such file -- bundler/setup (LoadError)

finalmente in esecuzione gem install rails -v 4.2risolto


1

La versione del bundler potrebbe causare il problema.

Installa il bundler con un altro numero di versione.

Per esempio,

gem install bundler -v 1.0.10


Nel mio caso questo errore si verifica dopo l'installazione del bundler v2 . Lo risolvo con gem uninstall -a bundler; gem install bundler -v '<2.0'.
SergA

0

Ho avuto questo perché c'era qualcosa di brutto nel mio vendor/bundle. Niente a che fare con Apache, solo in sviluppo locale.

Per risolvere, ho cancellato vendor\bundlee cancellato anche il riferimento ad esso nel mio.bundle/config modo che non venisse riutilizzato.

Quindi, ho ri-raggruppato (che poi installato al GEM_HOMEposto di vendor/bundlee il problema è andato via.


0

NOTA: la mia società di hosting è Site5.com e ho un VPS gestito.

Ho aggiunto variabili env per GEM_HOME e GEM_PATH al file .htaccess nella mia directory public_html (un alias della directory pubblica nell'app rails)

Non erano necessari prima, quindi qualcosa deve essere cambiato sul lato host. Si è verificato questo errore dopo aver toccato il file restart.txt per riavviare il server passeggero.

Hai ricevuto GEM_PATH da:

echo $ GEM_PATH

Ho ricevuto GEM_HOME da:

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

File .htaccess aggiornato con le seguenti righe:

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

Per me il problema era associare RVM Ruby a Passenger. Quindi avevo bisogno di integrare il wrapper RVM ruby ​​nel file di configurazione del passeggero.

Scopro il percorso del wrapper rvm ruby ​​con il comando:

passenger-config --ruby-command

Ho preso il percorso dal risultato e sono entrato in una configurazione passeggero 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;

0

Ho risolto il problema creando il progetto di test rail e installando tutte le gemme, quindi ho sostituito il mio Gemfile.lock attuale con il test e tutto funziona perfettamente.

Penso che questo problema bundlersia dovuto alle versioni con hosting, quindi assicurati che l'hosting bundler sia la stessa versione del tuo progetto.


0

Nella mia situazione si trattava delle autorizzazioni:

 sudo chmod -R +777 <your_folder_path>

-1: non mettere mai 777 su file o directory. Se esiste una divisione tra "proprietario", "gruppo" e "altri", è perché è una questione di sicurezza.
Florian Doyen,

0

La versione della versione rubino utilizzata per il passeggero phusion differisce dall'app 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>

Assicurati che la versione su httpd config sia la stessa con l'app rails.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.