超时不适用于 Rails 应用程序的 heroku

Timeout not working on heroku for Rails application

我尝试增加超时时间,我在生产中有应用程序 运行 并且部署在 heroku 上。我有一些需要超过 30 秒的请求。这些请求是在数据库中的插入。由于要求,我无法将这些插入移动到后台作业。我将超时时间增加到 60 秒,后来我将其增加到 80 秒并且工作正常。但最近它停止了 运行 无论我做什么它都不让我增加超时。这在开发环境中工作得很好,但在生产环境中却不行。 gem 我用的是 rack-timout

我使用了这些选项:

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

如有任何帮助,我们将不胜感激。提前致谢。

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

无论如何你都应该把它移到异步的。一种方法可能是触发创建一个具有状态的 "job" 对象的请求。然后,您需要做的一切都在后台执行。 操作完成后,您将状态值从 "pending" 更新为 "success"。

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