2013-03-10 6 views
13

Ho installato Apache, Passenger e Sinatra e distribuito un'applicazione. Si dà errore quando si prova ad accedere:Passeggero: errore interno server

An error occurred while starting up the preloader: it did not write a startup response in time. 

Application root 
    /var/www/html/test 
Environment (value of RAILS_ENV, RACK_ENV, WSGI_ENV and PASSENGER_ENV) 
    production 
Ruby interpreter command 

    /usr/local/bin/ruby 

User and groups 

    Unknown 

Environment variables 

    Unknown 

Ulimits 

    Unknown 

Come posso risolverlo?


Modifica

Nel registro dell'applicazione, ho trovato questa linea di errore:

!> Ready 
!> socket: unix:/tmp/passenger.1.0.14019/generation-0/backends/preloader.14049 
!> 

Gem lista:

bigdecimal (1.2.0) 
builder (3.2.0) 
bundler (1.3.1) 
daemon_controller (1.1.1) 
fastthread (1.0.7) 
io-console (0.4.2) 
json (1.7.7) 
minitest (4.3.2) 
passenger (4.0.0.rc4) 
psych (2.0.0) 
rack (1.5.2) 
rack-protection (1.4.0) 
rake (0.9.6) 
rdoc (4.0.0) 
sequel (3.45.0) 
sinatra (1.3.5) 
test-unit (2.0.0.0) 
tilt (1.3.4) 

versione del sistema:

Ruby 2.0 
Apache 2.2 
Amazon EC2 Instance 

L'app funzionava bene con Ruby 1.9 e Passenger 3.0. Ho appena aggiornato a 2.0 e Passenger 3.0 non si è nemmeno compilato correttamente. Mi hanno suggerito di utilizzare Passenger Pre 4.0, e ha compilato bene, ma non ha eseguito l'app ...

+0

L'app Sinatra funziona senza Apache e Passenger? Quali versioni di Apache, Passenger, Sinatra, Ruby stai eseguendo, e quale sistema operativo e versione? – iain

+0

Inoltre, quale metodo di spawn stai usando? – fmendez

+0

@iain vedi modifica :) – texasbruce

risposta

18

Ho trovato la risposta che cosa sta causando nel mio caso. Nel mio config.ru ero reindirizzamento STDOUT come questo:

log = File.new("logs/std.log", "a+") 
STDOUT.reopen(log) 

Rimozione del reindirizzamento nel registro e si avvia di nuovo.

Sembra che il passeggero abbia bisogno di STDOUT per rilevare un "preloader" funzionante.


Edit: Attualmente sto usando la seguente soluzione per reindirizzare il registro in un file e mantenere il passeggero felice (fondamentalmente solo duplicare stdout nel file di registro e non riorientare):

log = File.new("logs/std.log", "a+") 
def STDOUT.write string 
    log.write string 
    super 
end 
STDOUT.sync = true 
+0

L'ho rimosso e funziona anche! Ma come dovremmo registrarci? E 'un errore? Qualche segnalazione? – texasbruce

+0

Oh l'ho scoperto. Solo il reindirizzamento di stderr al file di registro fa il trucco. Hanno aggiunto una nuova "caratteristica" che forza il reindirizzamento dello stdout allo stderr, ecco perché richiedono lo stdout non modificato per iniziare ... – texasbruce

+0

Qualcuno sa se c'è ancora una correzione? Voglio registrare gli accessi (inclusi i tempi) al mio registro standard. – esilver

4

In caso quanto sopra non lo risolva per te, ho avuto lo stesso identico messaggio di errore con una causa diversa.

Nel mio caso, stavamo usando un server di database esterno che era andato giù.

Il backup del server DB esterno ha risolto il problema.

Ma prima abbiamo risolto questo, abbiamo trascorso un po 'di tempo a pensare a passeggero ricompilare, ecc

Spero che questo atto di risparmiare qualcuno un po' di tempo.

1

di riferimento futuro: ho avuto credenziali del database sbagliato nella mia config, che ha portato lo stesso errore.