2016-07-08 14 views
1

Dies ist eine Folgefrage an my other question here on stack.Es dauert eine Weile, bis die Website zurückkommt. 500 Interner Serverfehler

Nicht sicher, ob das ein Problem mit Play ist oder das ist normal Ergebnisse für einen Webserver. Ich benutze play 2.1.2

Ich habe eine Website, die sofort HTTP-Code 200 zurückgibt, wenn die Dinge gut funktionieren. Wenn die Site Probleme hat, gibt es aus irgendeinem Grund nicht sofort einen 500 Internal Server Error zurück. Es scheint, als würde es 5 Minuten dauern, bis es schließlich einen Fehler von 500 zurückgibt.

Ist das ein Problem mit der Verwendung des Play-Frameworks, um unsere Website zu betreiben, oder gibt es etwas anderes, was ich überprüfen sollte, warum dies geschieht? Ich benutze auch httplib von Python, um die Website zu überprüfen.

Ich weiß nicht, welche weiteren Details zu debuggen helfen, aber hoffentlich ist die einfache Antwort das Spiel-Framework tut etwas auf der Website und antwortet nicht mit einem 500 Code, bis die Auszeit (5 min) hat bestanden.

UPDATE: Beigefügt ist die Nachricht vom Server, wenn ich es mit meinem Skript traf. Dies ist auf einem Testserver, also erwarte ich, dass es fehlschlägt. Ich habe ulimit -n 275 ausgeführt, um einen Fehler auf dem Server zu verursachen.

Dies ist der Fehler, den ich von meinem Skript, wenn ich es innerhalb von 5 min ein Problem verursacht laufen:

got some exception 
Traceback (most recent call last): 
    File "monitorAlive.py", line 27, in <module> 
    main() 
    File "monitorAlive.py", line 24, in main 
    get_status_code(host) 
    File "monitorAlive.py", line 16, in get_status_code 
    if resp == 200: 
UnboundLocalError: local variable 'resp' referenced before assignment 

Allerdings, wenn ich warte 5+ min und dann laufe ich meinen Skript auf der Website zu überprüfen, ist es das, was ich bekommen:

didn't get a 200 http response. something wrong 
this is the code we got: 500 

dies sind die Protokoll msgs ich zu der Zeit ca

hat den Fehler "Nicht in der Datei" verwendet. Mein Skript führt nicht dazu, dass der Webserver irgendwelche zusätzlichen Nachrichten aufzeichnet, aber ich führe mein Skript aus, nachdem ich absichtlich Probleme mit der Site/dem Server verursacht habe, so dass diese msg von mir sind und einen Fehler aufgrund von Dateien verursachen.

! @70jo4chan - Internal server error, for (GET) [/] -> 

play.api.PlayException: Not initialized[?] 
     at play.core.ReloadableApplication.<init>(ApplicationProvider.scala:92) ~[play_2.10.jar:2.1.2] 
     at play.core.server.NettyServer$$anonfun$mainDev$1.apply(NettyServer.scala:273) ~[play_2.10.jar:2.1.2] 
     at play.core.server.NettyServer$$anonfun$mainDev$1.apply(NettyServer.scala:272) ~[play_2.10.jar:2.1.2] 
     at play.utils.Threads$.withContextClassLoader(Threads.scala:18) ~[play_2.10.jar:2.1.2] 
     at play.core.server.NettyServer$.mainDev(NettyServer.scala:271) ~[play_2.10.jar:2.1.2] 
     at play.core.server.NettyServer.mainDev(NettyServer.scala) ~[play_2.10.jar:2.1.2] 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_71] 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) ~[na:1.7.0_71] 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.7.0_71] 
     at java.lang.reflect.Method.invoke(Method.java:606) ~[na:1.7.0_71] 
     at sbt.PlayCommands$$anonfun$53$$anonfun$55.apply(PlayCommands.scala:575) ~[na:na] 
     at sbt.PlayCommands$$anonfun$53$$anonfun$55.apply(PlayCommands.scala:507) ~[na:na] 
     at scala.Either$RightProjection.map(Either.scala:533) ~[na:na] 
     at sbt.PlayCommands$$anonfun$53.apply(PlayCommands.scala:507) ~[na:na] 
     at sbt.PlayCommands$$anonfun$53.apply(PlayCommands.scala:487) ~[na:na] 
     at sbt.Command$$anonfun$sbt$Command$$apply1$1$$anonfun$apply$6.apply(Command.scala:72) ~[na:na] 
     at sbt.Command$.process(Command.scala:90) ~[na:na] 
     at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(MainLoop.scala:71) ~[na:na] 
     at sbt.MainLoop$$anonfun$next$1$$anonfun$apply$1.apply(MainLoop.scala:71) ~[na:na] 
     at sbt.State$$anon$2.process(State.scala:170) ~[na:na] 
     at sbt.MainLoop$$anonfun$next$1.apply(MainLoop.scala:71) ~[na:na] 
     at sbt.MainLoop$$anonfun$next$1.apply(MainLoop.scala:71) ~[na:na] 
     at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18) ~[na:na] 
     at sbt.MainLoop$.next(MainLoop.scala:71) ~[na:na] 
     at sbt.MainLoop$.run(MainLoop.scala:64) ~[na:na] 
     at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:53) ~[na:na] 
     at sbt.MainLoop$$anonfun$runWithNewLog$1.apply(MainLoop.scala:50) ~[na:na] 
     at sbt.Using.apply(Using.scala:25) ~[na:na] 
     at sbt.MainLoop$.runWithNewLog(MainLoop.scala:50) ~[na:na] 
     at sbt.MainLoop$.runAndClearLast(MainLoop.scala:33) ~[na:na] 
     at sbt.MainLoop$.runLoggedLoop(MainLoop.scala:17) ~[na:na] 
     at sbt.MainLoop$.runLogged(MainLoop.scala:13) ~[na:na] 
     at sbt.xMain.run(Main.scala:26) ~[na:na] 
     at xsbt.boot.Launch$.run(Launch.scala:55) ~[na:na] 
     at xsbt.boot.Launch$$anonfun$explicit$1.apply(Launch.scala:45) ~[na:na] 
     at xsbt.boot.Launch$.launch(Launch.scala:69) ~[na:na] 
     at xsbt.boot.Launch$.apply(Launch.scala:16) ~[na:na] 
     at xsbt.boot.Boot$.runImpl(Boot.scala:31) ~[na:na] 
     at xsbt.boot.Boot$.main(Boot.scala:20) ~[na:na] 
     at xsbt.boot.Boot.main(Boot.scala) ~[na:na] 

UPDATE # 2: Ich spiele bin mit zu erwähnen vergessen 2.1.2

+0

Haben Sie Zugriff auf Serverprotokolle? – rethab

+0

@rethab, thx zum suchen. Ich habe sie zu der Frage als eine Bearbeitung hinzugefügt, obwohl, sagt es uns nicht viel = ( – Classified

+0

@rethab Laufen Sie Play im Dev-Modus? Vielleicht ist es nur Dinge kompilieren? – Salem

Antwort

1

Wenn Sie play run verwenden, wird Ihre Anwendung in dev-Modus gestartet werden. In diesem Modus startet die App selbst erst, wenn sie die erste Anfrage erhält. Manchmal passiert es, dass Play, selbst nachdem der Server gestartet wurde und bereit ist, Anfragen anzunehmen, etwas verändert und einige Dinge neu kompiliert hat. Der Browser "wartet" (ich habe dieses Verhalten in jeder Play 2.x Version bemerkt, aber ich bin mir nicht sicher, ob es etwas mit meinem Setup oder einem Bug zu tun hat). Dies kann der Grund für die Verzögerungen sein, die Sie bekommen.

Der beste Weg, dies zu vermeiden, ist sicherzustellen, dass alles bereit ist, zu machen, play copile und play start, oder play dist verwenden, mit dem Sie eine Datei mit Ihrer Anwendung liefert bereit in der Produktion eingesetzt werden. Weitere Informationen finden Sie unter here.