Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
长生不老药&x2B;Heroku上的凤凰:15秒后超时错误_Heroku_Elixir_Phoenix Framework_Cowboy - Fatal编程技术网

长生不老药&x2B;Heroku上的凤凰:15秒后超时错误

长生不老药&x2B;Heroku上的凤凰:15秒后超时错误,heroku,elixir,phoenix-framework,cowboy,Heroku,Elixir,Phoenix Framework,Cowboy,上下文:我正在Heroku上运行elixir+phoenix应用程序。我按照中提到的步骤部署应用程序 问题:当POST请求耗时超过15秒时,web服务器返回500个内部服务器错误,日志显示错误为无case子句匹配:{:error,:timeout}。错误堆栈粘贴在下面 2015-11-10T16:56:06.680425+00:00 app[web.1]: 16:56:06.680 request_id=19c1ba3f-cfaf-476f-a145-12d234b61c55 [info] PO

上下文:我正在Heroku上运行elixir+phoenix应用程序。我按照中提到的步骤部署应用程序

问题:当POST请求耗时超过15秒时,web服务器返回500个内部服务器错误,日志显示错误为
无case子句匹配:{:error,:timeout}
。错误堆栈粘贴在下面

2015-11-10T16:56:06.680425+00:00 app[web.1]: 16:56:06.680 request_id=19c1ba3f-cfaf-476f-a145-12d234b61c55 [info] POST /stub_urls
2015-11-10T16:56:21.684018+00:00 heroku[router]: at=info method=POST path="/stub_urls" host=stubonweb.herokuapp.com request_id=19c1ba3f-cfaf-476f-a145-12d234b61c55 fwd="43.247.159.40" dyno=web.1 connect=1ms service=15004ms status=500 bytes=243
2015-11-10T16:56:21.683882+00:00 app[web.1]: 16:56:21.683 [error] #PID<0.429.0> running StubOnWeb.Endpoint terminated
2015-11-10T16:56:21.683887+00:00 app[web.1]: Server: stubonweb.herokuapp.com:80 (http)
2015-11-10T16:56:21.683888+00:00 app[web.1]: Request: POST /stub_urls
2015-11-10T16:56:21.683889+00:00 app[web.1]: ** (exit) an exception was raised:
2015-11-10T16:56:21.683890+00:00 app[web.1]:     ** (CaseClauseError) no case clause matching: {:error, :timeout}
2015-11-10T16:56:21.683891+00:00 app[web.1]:         (plug) lib/plug/parsers/urlencoded.ex:10: Plug.Parsers.URLENCODED.parse/5
2015-11-10T16:56:21.683892+00:00 app[web.1]:         (plug) lib/plug/parsers.ex:186: Plug.Parsers.reduce/6
2015-11-10T16:56:21.683893+00:00 app[web.1]:         (stub_on_web) lib/stub_on_web/endpoint.ex:1: StubOnWeb.Endpoint.phoenix_pipeline/1
2015-11-10T16:56:21.683894+00:00 app[web.1]:         (stub_on_web) lib/phoenix/endpoint/render_errors.ex:34: StubOnWeb.Endpoint.call/2
2015-11-10T16:56:21.683894+00:00 app[web.1]:         (plug) lib/plug/adapters/cowboy/handler.ex:15: Plug.Adapters.Cowboy.Handler.upgrade/4
2015-11-10T16:56:21.683895+00:00 app[web.1]:         (cowboy) src/cowboy_protocol.erl:442: :cowboy_protocol.execute/4
2015-11-10T16:56:06.680425+00:00应用程序[网站1]:16:56:06.680请求id=19c1ba3f-cfaf-476f-a145-12d234b61c55[信息]发布/存根URL
2015-11-10T16:56:21.684018+00:00 heroku[路由器]:at=info method=POST path=“/stub\u url”host=stubonweb.herokuapp.com请求\u id=19c1ba3f-cfaf-476f-a145-12d234b61c55 fwd=“43.247.159.40”dyno=web.1 connect=1ms服务=15004ms状态=500字节=243
2015-11-10T16:56:21.683882+00:00应用程序[web.1]:16:56:21.683[错误]#运行StubOnWeb的PID。终结点已终止
2015-11-10T16:56:21.683887+00:00应用程序[网站1]:服务器:stubonweb.herokuapp.com:80(http)
2015-11-10T16:56:21.683888+00:00应用程序[web.1]:请求:发布/存根URL
2015-11-10T16:56:21.683889+00:00应用程序[web.1]:**(退出)引发异常:
2015-11-10T16:56:21.683890+00:00应用程序[web.1]:**(CaseClauseError)没有匹配的case子句:{:错误,:超时}
2015-11-10T16:56:21.683891+00:00应用程序[web.1]:(plug)lib/plug/parsers/urlencoded.ex:10:plug.parsers.urlencoded.parse/5
2015-11-10T16:56:21.683892+00:00应用程序[web.1]:(plug)lib/plug/parsers.ex:186:plug.parsers.reduce/6
2015-11-10T16:56:21.683893+00:00应用程序[web.1]:(网络上的存根)lib/存根/web上的存根/endpoint.ex:1:StubOnWeb.endpoint.phoenix\u管道/1
2015-11-10T16:56:21.683894+00:00应用程序[web.1]:(网络上的存根)lib/phoenix/endpoint/render\u错误。示例:34:StubOnWeb.endpoint.call/2
2015-11-10T16:56:21.683894+00:00应用程序[web.1]:(plug)lib/plug/adapters/cowboy/handler.ex:15:plug.adapters.cowboy.handler.upgrade/4
2015-11-10T16:56:21.683895+00:00应用程序[web.1]:(牛仔)src/cowboy_协议erl:442::cowboy_协议执行/4
我的观察

  • 如果请求时间超过30秒,则不会发生Heroku路由器的“H12错误”。参考号:。我无法从heroku支持部门获得太多帮助,因为这似乎是web服务器问题,而且他们不知道erlang/elixir

  • 我试着在本地运行生产配置,模拟了60秒的延迟。请求在60秒后返回200 OK响应,没有任何超时错误,如上所述


这里有我缺少的配置吗?还有其他想法吗?

自从我添加了一个插件来读取请求正文并将其保存为conn中的私有分配以供将来访问后,问题就发生了。前面使用的代码是

defp copy_req_body(conn, _) do
    {:ok, body, _} = Plug.Conn.read_body(conn, length: 1_000_000_000)
    Plug.Conn.put_private(conn, :raw_request_body, body)
end

plug :copy_req_body

plug Plug.Parsers,
    parsers: [:urlencoded, :multipart, :json],
    pass: ["*/*"],
    json_decoder: Poison
plug似乎有一个问题,它导致:plug.parser再次尝试读取主体时超时

目前的临时解决方案是使用中建议的代码


参考提交:

此github问题可能与此相关:谢谢@PatrickOscity。这个问题让我找到了凤凰城问题中的另一个线程,以及该问题的临时解决方案。如果还有其他人面临类似问题,请参考说明和解决方法