花一点时间让网站返回500内部服务器错误

时间:2016-07-08 03:49:35

标签: python python-2.7 http playframework httplib

这是my other question here on stack的后续问题。

不确定这是否是播放问题,或者这是网络服务器的正常结果。我正在使用play 2.1.2

如果一切正常,我有一个网站立即返回http代码200。 如果网站出现问题,由于某种原因,它不会立即返回500内部服务器错误。似乎它需要5分钟才能最终返回500错误。

使用Play框架运行我们的网站是否存在问题,或者我应该检查一下为什么会发生这种情况?我也使用python的httplib来检查网站。

我不知道要添加什么其他细节来帮助调试,但希望简单的答案是播放框架正在对网站做一些事情,并且在超时之前不会回复500代码(5 min)过去了。

更新:附件是我用脚本点击它时来自服务器的消息。这是在测试服务器上,所以我预计它会失败。我执行ulimit -n 275导致服务器上出现文件错误。

如果我在导致问题的5分钟内运行它,这是我从脚本中得到的错误:

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

但是,如果我等待5+分钟然后我运行我的脚本来检查网站,这就是我得到的:

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

这是我导致文件出错时的日志消息。我的脚本没有导致网络服务器记录任何其他消息,但是我故意导致网站/服务器出现问题后运行我的脚本,因此这些消息来自我,导致文件出错。

! @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]

更新#2:忘记提及我使用play 2.1.2

1 个答案:

答案 0 :(得分:1)

使用play run时,您的应用将以开发模式启动。在这种模式下,应用程序本身只有在收到第一个请求时才会真正启动。有时会发生这样的情况,即使在服务器启动并准备好接受请求之后,Play也会检测到某些内容已经发生变化并重新编译某些内容,让浏览器“等待”(我在每个Play 2.x版本中都注意到了这种行为,但我不确定它是否与我的设置或错误有关。这可能是你得到延误的原因。

避免这种情况的最佳方法是使用play copileplay start或使用play dist确保一切准备就绪,这将为您提供准备好应用程序的文件用于生产。有关详细信息,请参阅here