【问题标题】:Timeout not working on heroku for Rails application超时不适用于 Rails 应用程序的 heroku
【发布时间】:2019-02-21 02:58:26
【问题描述】:

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

我使用了以下选项:

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

任何帮助将不胜感激。提前致谢。

【问题讨论】:

  • 我不确定这是否会有所帮助,但 this heroku 的建议。

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-03
    • 1970-01-01
    • 2017-02-23
    • 1970-01-01
    相关资源
    最近更新 更多