超时在Heroku for Rails应用程序上不起作用

时间:2018-09-17 08:15:46

标签: ruby-on-rails ruby heroku timeout rack

我尝试增加超时,我的应用程序正在生产中运行,并且已部署在heroku上。我的要求超过30秒。这些请求将插入数据库中。由于要求,我无法将这些插入内容移至后台作业。我将超时时间增加到60秒,后来又将其增加到80秒,并且工作正常。但是最近无论我做什么它都停止运行,这不是让我增加超时时间。这在开发环境上效果很好,但在生产环境上效果很好。我使用的宝石是机架计时

我使用了以下选项:

Rack::Timeout.timeout = 60  # seconds
Rack::Timeout.wait_timeout = 60
Rack::Timeout.wait_overtime = 60
Rack::Timeout.service_timeout = 60
Rack::Timeout.service_past_wait = true

最初,我只使用超时选项,它过去工作正常。但是后来我尝试添加更多选项,希望它们中的任何一个都可以工作。

服务器输出:

    2018-09-17T08:00:32.163182+00:00 heroku[router]: at=error code=H12 desc="Request timeout"
method=POST path="/organizations/53/events" host=HOST_NAME 
request_id=abbd22bf-5298-4480-m027-aa00a52a0587 fwd="103.7.79.236" dyno=web.1
connect=1ms service=30135ms status=503 bytes=0 protocol=https

任何帮助将不胜感激。预先感谢。

1 个答案:

答案 0 :(得分:6)

H12是Heroku给出的超时,不是由您的应用引起的。 Heroku没有给您增加超时时间的方法。

无论如何,您都应将其移为异步。一种方法是触发一个请求,该请求将创建一个具有状态的“作业”对象。然后,您需要做的所有事情都会在后台执行。 操作完成后,将状态值从“待处理”更新为“成功”。

客户端可以获取作业以了解该异步操作的进展。