2013-09-27 15 views
90

Sto installando Rails 4 applicazione con Ruby 2.0, ma sto ottenendo "applicazione Web non poteva essere avviato" e ottenere questo tracciato:non può caricare tale file - fardellatrice/setup (LoadError)

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

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 essere GEM_PATH/usr/lib/ruby/gems/2.0?

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

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

E ora si sta lavorando.

È il modo giusto per risolvere il problema?

risposta

42

Potrebbe essere che esistesse un precedente Ruby env installato sul sistema prima dell'installazione di 2.0? Questo potrebbe aver avuto un GEM_PATH esistente che porta alla directory /1.8 che l'installazione della versione 2.0 ha semplicemente mantenuto.

Il problema, probabilmente, era che Passenger/Apache cercava nella directory /2.0 quando in realtà le gem erano nella directory /1.8. Il tuo esplicitamente dicendo apache di usare la directory /1.8 ha quindi senso risolvere il problema.

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

Si potrebbe anche provare a utilizzare il Ruby Version Manager di gestire più ENV Ruby.

Alcune cose che ho trovato in Google:

23

Molto probabilmente hanno installato più di un rubino.

Se si utilizza RVM, probabilmente è necessario eseguire:

rvm use system 

per impostare la versione di Ruby da usare.

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

ruby -v 

vi dirà la versione che si sta utilizzando.

9

Nel mio caso, le linee allegati al file di configurazione di apache dopo l'installazione del passeggero sono stati i 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'applicazione richiede di Ruby 2.0.0 così mi c'è voluto un po 'ma alla fine, l'errore è stato risolto dopo aver specificato un percorso diverso con 'PassengerRuby' al di sotto, all'interno del file di configurazione di Apache host virtuale per l'applicazione:

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

Questo è stato il caso con me come bene. Nel mio caso "PassengerDefaultRuby" si riferiva ad una vecchia installazione di ruby. – Waseem

7

ho ottenuto questo errore in un'applicazione Rails fresco con fascio installato correttamente. Commentando la gemma primaverile di Gemfile ha risolto il problema.

+3

Questo era per me, ma 'gem install spring 'invece di commentare. – jakenberg

119

avevo quasi esattamente lo stesso errore, ed è stato in grado di risolvere completamente semplicemente eseguendo:

gem install bundler 

E 'possibile l'installazione Bundler è danneggiato o mancante - quello che è successo nel mio caso. Si noti che se quanto sopra non riesce si può provare:

sudo gem install bundler 

... ma in generale si può farlo senza sudo.

+2

Questo ero io! Domanda - il 'sudo' è effettivamente necessario? Ho usato 'sudo' ma ora mi chiedo cosa sarebbe successo se non l'avessi fatto. – Pete

+0

Nel mio caso, sì, ma penso che dipenda dal tuo sistema operativo. Inizialmente l'ho fatto su Linux Mint 17, ma su un box OSX sudo potrebbe non essere stato necessario. Inoltre, avevo già installato tutti i miei altri software relativi a Ruby usando sudo. (Cattiva pratica, ma non è per le applicazioni di produzione a questo punto comunque). –

+2

Se stai usando una versione diversa di Ruby rispetto al default di sistema, NON devi usare 'sudo'! 'sudo gem ....' installerà la versione 'default' della gemma e (nel mio caso, Ubuntu 14.04)' sudo' non può eseguire rvm. Aggiornamento – Farfromunique

0

Ho avuto questo perché qualcosa di brutto era nel mio vendor/bundle. Niente a che vedere con Apache, solo nel locale dev env.

Per risolvere il problema, ho eliminato vendor\bundle e ho eliminato anche il riferimento ad esso nel mio .bundle/config in modo da non essere riutilizzato.

Poi, ho ri-bundle (che poi installato al posto del GEM_HOMEvendor/bundle ed il problema è andato via

14

Si può provare a eseguire:.

bundle exec rake rails:update:bin 

Come @Dinesh menzionato in Rails 5:

rails app:update:bin 
0

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

0.123.516.

ho aggiunto le variabili env sia per GEM_HOME e GEM_PATH al file .htaccess nella mia directory public_html (un alias alla directory pubblica in app rotaie)

Essi non sono stati necessari prima che quindi qualcosa deve essere cambiato sul lato host . Ha ottenuto questo errore dopo aver toccato il file restart.txt per riavviare il server passeggeri.

Got GEM_PATH da:

echo $ GEM_PATH

Hai il GEM_HOME da:

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

Aggiornato file .htaccess 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 con Passenger. Quindi avevo bisogno di integrare RVM wrapper rubino nel file di configurazione del passeggero.

trovo fuori rvm rubino percorso involucro con il comando:

passenger-config --ruby-command 

ho preso il percorso dal risultato ed è entrato in una configurazione di 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; 
Problemi correlati