Heroku上的Rust HTTP服务器生成错误H18 - 服务器请求中断

时间:2017-03-12 14:38:05

标签: heroku rust

问题

我正在尝试在Heroku上托管一个用Rust编写的简单HTTP服务器。

我没有使用外部HTTP库,因为这是大学的学习项目,所以我通过TcpStream来管理所有内容。

服务器在本地按预期工作。

我一直看到Heroku日志中的H18(服务器请求中断)错误,而Heroku上正在运行的实例不提供任何文件。具体而言,会出现以下类型的错误:

2017-03-12T14:11:53.952084+00:00 heroku[router]: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/" host=regans-rust-project.herokuapp.com request_id=fe50b113-8091-4129-99f5-632c9536bb8e fwd="154.126.208.8" dyno=web.1 connect=0ms service=2ms status=503 bytes=581 protocol=https

2017-03-12T14:11:54.459277+00:00 heroku[router]: sock=backend at=error code=H18 desc="Server Request Interrupted" method=GET path="/favicon.ico" host=regans-rust-project.herokuapp.com request_id=cf6ad8a0-2780-4c07-843a-2b533df1c9aa fwd="154.126.208.8" dyno=web.1 connect=0ms service=1ms status=503 bytes=388 protocol=https

我尝试了什么

  • 我通过调用Heroku的bash实用程序确保了静态资源在目录中。我也从这里运行可执行文件,服务器也可以从Heroku实例本地运行
  • 我确保我返回格式正确的HTTP响应(我有状态代码,内容类型,连接类型,内容长度)。

我的代码

您可以看到我的代码here

我使用以下buildpack

我还有什么要追加到我对#34;完成"他们?任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:1)

正如评论中所讨论的那样,问题是代码使用\n作为HTTP响应中的分隔符,而标准说它应该是\r\n

答案 1 :(得分:0)

我还遇到了测试POST调用以在Flask服务器上处理图像文件时遇到的错误。 我在返回响应之前添加了一个简单的延迟

time.sleep(3)

成功了! 我相信Heroku(免费订阅)需要一些时间来从基础结构角度处理POST请求,因此如果您立即返回,则会引发网络错误

之前

@app.route("/process_image", methods=['POST'])
def process_image():
    print ("received ")
    return json.dumps({'success': True}), 200, {'ContentType': 'application/json'}

以后

@app.route("/process_image", methods=['POST'])
def process_image():
    print ("received ")
    time.sleep(3)
    return json.dumps({'success': True}), 200, {'ContentType': 'application/json'}