【问题标题】:Falcon app using Gunicorn on Heroku stalls在 Heroku 摊位上使用 Gunicorn 的 Falcon 应用程序
【发布时间】:2016-02-07 02:18:02
【问题描述】:

我正在尝试使用 gunicorn 在 Heroku 上提供猎鹰应用程序。

我几乎遵循 falcon 文档并创建了一个基本应用程序。

我在处理请求时使用 psycopg2 为每个 Resource 添加一个连接游标。

web: gunicorn app:api --log-level=DEBUG --worker-class=gevent

但是现在每个请求都会导致超时:

Feb 06 18:10:01 d.19db00e4-faf8-47bc-aaea-c78a52163a24 heroku/router:  at=error code=H12 desc="Request timeout" method=GET path="/" host=falcon-raptor-api.herokuapp.com request_id=3b29350f-8990-430c-92e8-02458d91a2f9 fwd="54.91.242.125" dyno=web.1 connect=1ms service=30001ms status=503 bytes=0 

我认为这是 psycopg2 或 gunicorn 或两者都有的问题。

有什么建议吗?

【问题讨论】:

    标签: python heroku gunicorn falconframework


    【解决方案1】:

    我在 Heroku 上使用 Gunicorn 部署 Falcon API 时遇到了类似的问题。我的问题是我没有使用 Gunicorn 的 bind 参数,所以没有可以听的套接字。 Heroku 使用动态端口号,所以最好只使用 $PORT 变量。在你的 Procfile 中尝试这样的事情:

    web: gunicorn -b 0.0.0.0:$PORT app:api --log-level=DEBUG --worker-class=gevent
    

    【讨论】:

      【解决方案2】:

      听起来像是在 gevent greenthead 内部进行了阻塞调用。确保在应用程序期间尽早手动修补或猴子修补相关的网络库(socket、psycopg2 等)。

      Using gevent monkey patching with threading makes thread work serially

      【讨论】:

        【解决方案3】:

        我在 Heroku 中使用 Falcon。

        在 proc 文件中使用以下内容

        web: gunicorn api:app --log-level=DEBUG --worker-class=gevent
        

        这里我假设你想在 Heroku 中使用 Gunicorn 运行“api.py”文件。

        我希望这能解决您的问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-11-26
          • 2021-04-27
          • 1970-01-01
          • 2011-09-22
          • 2013-12-23
          • 1970-01-01
          • 2021-11-03
          • 1970-01-01
          相关资源
          最近更新 更多