2013-03-10 24 views
13

Ich installierte Apache, Passagier und Sinatra und entfaltete eine App. Es gibt einen Fehler beim Zugriff:Passagier: interner Server Fehler

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 

Wie kann ich es lösen?


bearbeiten

Im Anwendungsprotokoll, fand ich diese Linie des Fehlers:

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

Gem Liste:

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) 

Systemversion:

Ruby 2.0 
Apache 2.2 
Amazon EC2 Instance 

Die App lief gut mit Ruby 1.9 und Passenger 3.0. Ich habe gerade ein Upgrade auf 2.0 durchgeführt und Passenger 3.0 wird nicht einmal richtig kompiliert. Sie schlugen mir vor, Passenger Pre 4.0 zu verwenden, und es kompilierte gut, aber führt die App nicht aus ...

+0

Läuft die Sinatra App ohne Apache und Passenger? Auf welchen Versionen von Apache, Passenger, Sinatra, Ruby und welchen Betriebssystemen laufen Sie? – iain

+0

Zusätzlich welche Spawn-Methode verwenden Sie? – fmendez

+0

@iain siehe bearbeiten :) – texasbruce

Antwort

18

Ich fand die Antwort, was es in meinem Fall verursacht. In meinem config.ru wurde ich STDOUT wie diese Umleitung:

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

die Umleitung in das Protokoll entfernen und es beginnt wieder auf.

Sieht aus wie Passagier braucht STDOUT, um einen funktionierenden "preloader" zu erkennen.


Edit: Ich bin derzeit folgende Lösung das Protokoll in eine Datei zu umleiten und halten Passagier glücklich (im Grunde nur stdout in die Log-Datei kopieren und die Umleitung nicht):

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

Ich habe es entfernt und es funktioniert auch! Aber wie sollen wir uns einloggen? Ist es ein Fehler? Irgendein Fehlerbericht? – texasbruce

+0

Oh, ich habe es herausgefunden. Lediglich das Umleiten von stderr in die Protokolldatei macht den Trick. Sie haben ein neues "feature" hinzugefügt, das die stdout-Weiterleitungen zu stderr zwingt, weshalb sie unmodifiziertes stdout benötigen, um zu starten ... – texasbruce

+0

Weiß jemand, ob es da noch eine Lösung gibt? Ich möchte Zugriffe (einschließlich der Timings) auf mein Standardprotokoll protokollieren. – esilver

4

In Fall das obige löst es nicht für Sie, ich hatte genau die gleiche Fehlermeldung mit einer anderen Ursache.

In meinem Fall verwendeten wir einen externen Datenbankserver und der war heruntergegangen.

Die Wiederherstellung des externen Datenbankservers behebt das Problem.

Aber bevor wir dieses Problem gelöst, verbrachten wir eine Menge Zeit über recompiling Passagier Denken usw.

Hope this Notiz einige Zeit spart jemand.

1

Für die Zukunft folgen: ich in meinem Config falsche Datenbank-Anmeldeinformationen hatte, die in dem gleichen Fehler geführt.