【问题标题】:Why would nginx+unicorn return 504 Timeout on exception (instead of stack trace)?为什么 nginx+unicorn 会在异常时返回 504 Timeout(而不是堆栈跟踪)?
【发布时间】:2011-12-30 12:31:56
【问题描述】:

在某些情况下,当代码中出现错误时(通常是部分变量命名错误,但也可能是其他原因),我从 nginx 得到 504 Timeout 而不是预期的堆栈跟踪(关于开发环境)。

规范似乎也因相同的错误而停滞不前(而不是立即报告“失败”)。

任何关于我应该研究什么或我的设置可能有什么问题的想法都会有所帮助。

我正在使用 Ruby on Rails 3.1。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.1 nginx unicorn


    【解决方案1】:

    您是否使用任何类型的异常捕获或异常通知?它可能在您的代码中、在您引用的库中或在您引用的 gem 中。

    如果是,请禁用它(将其注释掉,等等),看看你会得到什么。

    如果您在production 运行,请尽可能切换到development


    许多人不赞成这种故障排除方法,但我有时会做的另一件事是在我的代码中添加附加到状态文件的行(格式为 <DATE> <TIME> - <MESSAGE>。通过查看每个之后写入文件的内容请求,我可以找到问题所在。

    你可以这样做:

    def debug(filename, message)
      File.open(filename, 'a') {|f| f.write("#{Time.now} - #{message}") }
    end
    

    调用debug('/tmp/log.txt','Test Message') 会显示如下内容:

    2011-12-29 23:31:51 -0500 - Test Message
    

    【讨论】:

    • 当我得到响应时,我从 Unicorn 切换到 Thin,并且不再注意到这个错误。我确实有异常通知代码并尝试禁用它并没有帮助:(不过我很好奇,你为什么不直接使用 Rails.logger 而不是单独的状态日志?
    • @Damir Zekic 我不会使用 Rails 记录器,以防它是问题的一部分。对于这种调试,最简单的解决方案是最简单的。这也允许您在加载 Rails 记录器之前调试 Rails 启动,因为它不依赖于任何其他代码。
    猜你喜欢
    • 2021-11-02
    • 1970-01-01
    • 2011-01-05
    • 1970-01-01
    • 1970-01-01
    • 2017-08-06
    • 2010-09-13
    • 1970-01-01
    相关资源
    最近更新 更多