【问题标题】:I'm running a django app with gunicorn on heroku. What does this error in my heroku log file mean?我正在 Heroku 上运行带有 gunicorn 的 django 应用程序。我的heroku日志文件中的这个错误是什么意思?
【发布时间】:2012-02-07 06:59:48
【问题描述】:

我正在尝试在 heroku 上将 gunicorn 与我的 django 应用程序一起使用。我按照这里的说明进行操作:http://devcenter.heroku.com/articles/django#using_a_different_wsgi_server。看来 gunicorn 正在运行,因为日志表明它。但是,我不喜欢在日志文件中看到我不理解的错误消息,并且在查看日志时,我看到了“错误 R12(退出超时)-> 进程未能在 SIGTERM 的 10 秒内退出”的行” 然后“使用 SIGKILL 停止进程”。我的应用程序似乎在预期的 URL 上运行良好,所以这不是紧急情况,但我只是好奇发生了什么。谢谢。

2012-01-10T20:56:36+00:00 heroku[web.1]: State changed from up to bouncing
2012-01-10T20:56:36+00:00 heroku[web.1]: State changed from bouncing to created
2012-01-10T20:56:36+00:00 heroku[web.1]: State changed from created to starting
2012-01-10T20:56:39+00:00 heroku[web.1]: Stopping process with SIGTERM
2012-01-10T20:56:39+00:00 heroku[web.1]: Starting process with command `python blossom/manage.py run_gunicorn -b "0.0.0.0:27470" -w 3`
2012-01-10T20:56:40+00:00 app[web.1]: Validating models...
2012-01-10T20:56:40+00:00 app[web.1]: Django version 1.3.1, using settings 'blossom.settings'
2012-01-10T20:56:40+00:00 app[web.1]: 
2012-01-10T20:56:40+00:00 app[web.1]: Server is running
2012-01-10T20:56:40+00:00 app[web.1]: 0 errors found
2012-01-10T20:56:40+00:00 app[web.1]: Quit the server with CONTROL-C.
2012-01-10T20:56:40+00:00 app[web.1]: 2012-01-10 15:56:40 [3] [INFO] Starting gunicorn 0.13.4
2012-01-10T20:56:40+00:00 app[web.1]: 2012-01-10 15:56:40 [3] [INFO] Listening at: http://0.0.0.0:27470 (3)
2012-01-10T20:56:40+00:00 app[web.1]: 2012-01-10 15:56:40 [3] [INFO] Using worker: sync
2012-01-10T20:56:40+00:00 app[web.1]: 2012-01-10 15:56:40 [6] [INFO] Booting worker with pid: 6
2012-01-10T20:56:40+00:00 app[web.1]: 2012-01-10 15:56:40 [7] [INFO] Booting worker with pid: 7
2012-01-10T20:56:40+00:00 app[web.1]: 2012-01-10 15:56:40 [8] [INFO] Booting worker with pid: 8  
2012-01-10T20:56:41+00:00 heroku[web.1]: State changed from starting to up
2012-01-10T20:56:48+00:00 heroku[web.1]: Error R12 (Exit timeout) -> Process failed to exit within 10 seconds of SIGTERM
2012-01-10T20:56:48+00:00 heroku[web.1]: Stopping process with SIGKILL
2012-01-10T20:56:50+00:00 heroku[web.1]: Process exited

【问题讨论】:

    标签: django heroku gunicorn


    【解决方案1】:

    基本上就是罐头上的内容。在 Heroku 堆栈中,进程总是以 SIGTERM 终止,它告诉进程正常关闭,并给它十秒钟的时间。

    如果这在 10 秒内没有终止,那么您会收到一个 R12 错误和一个 SIGKILL,这实际上是一个终止。

    现在,这里发生这种情况的原因尚不完全清楚,因为日志回溯得不够远,但您可以看到 SIGTERM 发生在 20:56:39

    【讨论】:

    • 禁止正常进程关闭,如果请求时间超过 30 秒,Heroku 将杀死整个服务器进程并重新启动它。
    • 不正确。如果 dyno 过程超过 30 秒,但没有接触到 dyno,路由网格将向用户返回错误。使用 Cedar 堆栈,您只需要在 30 秒的窗口中返回一个字节,路由网格就会让请求继续滚动 55 秒的窗口(从而允许流连接)
    • 好吧,当我问这个问题时,克雷格没有提到技术性。 :-)
    【解决方案2】:

    没有足够的日志来确定地显示您的问题(错误 R12 可能意味着很多事情)。并且为了记录,我没有运行 Gunicorn。也就是说,我遇到了类似的问题。

    如果项目中的其他任何地方没有该应用程序的模块,那么 cedar-stack 不喜欢你在 settings.py 的 INSTALLED_APPS 部分中提及应用程序。

    我通常在开始在views.py 中编码之前将我的应用程序编码到INSTALLED_APPS,并且本地DJANGO 服务器不会抱怨,所以我习惯了这样做。不幸的是,它破坏了雪松堆栈。

    当我注释掉项目中其他任何地方都没有模块的应用程序并向上推新版本时,它马上又开始工作了。

    【讨论】:

      猜你喜欢
      • 2016-12-13
      • 2012-07-09
      • 2021-08-28
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 1970-01-01
      相关资源
      最近更新 更多