【问题标题】:Ruby mod_passenger process timeoutRuby mod_passenger 进程超时
【发布时间】:2011-11-23 19:01:55
【问题描述】:

我使用过的一些 Ruby 应用程序因调用缓慢而挂起很长时间,导致进程在机器上备份,最终需要重新启动。是否有一种快速简便的方法来限制单个 Apache 调用的执行时间。

在 PHP 中,如果一个进程超过了 php.ini 中设置的最大执行时间,则该进程会向 Apache 返回一个错误,并且服务器会愉快地关闭。

【问题讨论】:

  • 帮不了你的passenger,刚查了,在passenger doc里找不到任何选项。我们使用支持超时的 nginx + unicorn。设置有点复杂,但有一些优点。例如,独角兽不会像乘客工人那样闲着(然后需要再次启动,这会导致某些用户的响应时间很长)

标签: ruby-on-rails ruby apache2 passenger


【解决方案1】:

我会看看修复应用程序。在 Web 服务器级别切断请求实际上更像是一种创可贴,而不是解决核心问题——即请求失败,一种或另一种方式。如果 Ruby 应用程序依赖于另一个超时的服务,您可以使用 timeout.rb 库像这样修补代码:

require 'timeout'
status = Timeout::timeout(5) {
  # Something that should be interrupted if it takes too much time...
}

这将使代码“放弃”并在需要时优雅地关闭请求。

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 2015-03-27
    • 2010-11-16
    • 2011-04-13
    • 2014-05-12
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多