2013-03-23 11 views
7

Ho un server che esegue prevalentemente Ruby 1.8.7, ma ora ho un'applicazione Rails 3.2 che richiede 1.9.3. Ho installato Passenger 4 in quanto supporta la possibilità di eseguire più Ruby su base server virtuale.Passeggero 4 con PassengerRuby e set di pietre diverse

Tuttavia, sembra che mentre è possibile assegnare un particolare Ruby, l'applicazione non ha accesso al set di gemme di quel Ruby. Così ho il mio server virtuale configurato con il 1.9.3 Ruby, come confermato sulla pagina di errore la mia domanda dà ora:

Ruby interpreter command 
/home/aaron/.rvm/rubies/ruby-1.9.3-p0/bin/ruby 

Ma il parametro GEM_HOME racconta una storia diversa:

GEM_HOME = /home/aaron/.rvm/gems/ruby-1.8.7-p352 

Guardando attraverso le direttive di configurazione per Passenger 4, non vedo alcun modo per specificare un diverso set di gemme. Mi sto perdendo qualcosa, o questa cosa non è pronta per il prime time?

+0

Si sta schierando con capistrano? Di default installa gemme localmente, bypassando così completamente il percorso specificato in GEM_HOME. Se non è una soluzione completa, potrebbe essere una soluzione praticabile. – depa

+0

Ho configurato la mia applicazione per funzionare tramite Capistrano, ma non ha funzionato. Risulta che l'installazione di Passenger 4 con Ruby 1.8.7 è il problema. Quando eseguo Passenger 4 in 1.9.3 funziona perfettamente. Ma è un no-go. :-( –

risposta

21

Dal tuo GemSET corsa dir:

$ passenger-config --ruby-command 

Vi dirà rubino percorso per Apache e Nginx.

Command: /home/deric/.rvm/wrappers/[email protected]_gemset/ruby 
    Version: ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-linux] 
    To use in Apache: PassengerRuby /home/deric/.rvm/wrappers/[email protected]_gemset/ruby 
    To use in Nginx : passenger_ruby /home/deric/.rvm/wrappers/[email protected]_gemset/ruby 

Nginx: per Passenger 4 è possibile specificare più versioni di rubini. Così, per specifica configurazione del server:

your_site.conf:

server { 
    listen 80; 
    root /home/aaron/web/public; 
    passenger_enabled on; 
    passenger_ruby /home/aaron/.rvm/wrappers/[email protected]_gemset/ruby; 
} 

nginx.conf: (questo funziona per nuovo passeggero 4.0.17)

http { 

    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini; 

} 

Basta lanciare dal dir GemSET questo:

$ passenger-status 

Verificherà se passenger_native_support.so è disponibile. A seconda dell'installazione RVM, potrebbe essere necessario eseguirlo con rvmsudo

$ rvmsudo passenger-status 

per Debian/Ubuntu ora ci sono binary packages of nginx and passenger available che rende l'installazione molto più facile.

6

Come indicato da Tombart: Se si utilizza il precompiled Passenger modules (nel mio caso per Apache2) si finisce con un sistema attivo e funzionante.

Tuttavia, se si utilizza RVM mi sono imbattuto sul fatto che è necessario utilizzare la "directory wrapper" per selezionare il corretto RVM rubino versione e GEMET in questo modo nella tua Apache vhost config:

PassengerRuby /home/of_your_ruby_user/.rvm/wrappers/[email protected]/ruby 

In questo modo Passenger sa come trovare il gemset corretto relativo a questa directory (../../gems/[email protected]/gems). Altrimenti, il Passeggero userebbe lo "standard ruby ​​gemset" che è strano se si desidera eseguire più app con la stessa versione di rubino. Posso solo supporre che questo è simile per Nginx.

Problemi correlati