如何解决Rack Lint错误?

时间:2012-03-23 02:03:35

标签: ruby-on-rails ruby ruby-on-rails-3 rack unicorn

我注意到某些请求,特别是来自Uptime Robot的测试页面正常运行时间的请求最近开始在我的Rails 3.1.x应用程序上生成以下Rack Lint错误:

21:47:05 web.1     | Started HEAD "/" for 74.86.158.106 at 2012-03-22 21:47:05 -0400
21:47:05 web.1     |   Processing by HomeController#index as */*
...
21:47:05 web.1     | /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/activesupport-3.1.4/lib/active_support/core_ext/string/output_safety.rb:23: warning: regexp match /.../n against to UTF-8 string
...
21:47:05 web.1     | Completed 200 OK in 81ms (Views: 60.3ms | ActiveRecord: 0.0ms)
21:47:05 web.1     | 74.86.158.106 - - [22/Mar/2012 21:47:05] "GET / HTTP/1.1" 200 31842 0.1993
21:47:05 web.1     | E, [2012-03-22T21:47:05.546848 #18938] ERROR -- : app error: Content-Length header was 31842, but should be 0 (Rack::Lint::LintError)
21:47:05 web.1     | E, [2012-03-22T21:47:05.546978 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/rack-1.3.6/lib/rack/lint.rb:19:in `assert'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547079 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/rack-1.3.6/lib/rack/lint.rb:501:in `verify_content_length'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547178 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/rack-1.3.6/lib/rack/lint.rb:525:in `each'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547277 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/rack-1.3.6/lib/rack/body_proxy.rb:23:in `method_missing'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547375 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/unicorn-4.2.0/lib/unicorn/http_response.rb:41:in `http_response_write'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547476 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/unicorn-4.2.0/lib/unicorn/http_server.rb:538:in `process_client'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547574 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/unicorn-4.2.0/lib/unicorn/http_server.rb:604:in `worker_loop'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547672 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/unicorn-4.2.0/lib/unicorn/http_server.rb:487:in `spawn_missing_workers'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547770 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/unicorn-4.2.0/lib/unicorn/http_server.rb:137:in `start'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547867 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/gems/unicorn-4.2.0/bin/unicorn:121:in `<top (required)>'
21:47:05 web.1     | E, [2012-03-22T21:47:05.547966 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/bin/unicorn:19:in `load'
21:47:05 web.1     | E, [2012-03-22T21:47:05.548063 #18938] ERROR -- : /Users/username/.rvm/gems/ruby-1.9.3-p125@project/bin/unicorn:19:in `<main>'

关于这里可能会发生什么的任何想法?我现在真的没有找到解决方案,专门解决在这种情况下应该做些什么,以及寻找和追捕真正可能发生的事情。

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但我有完全相同的问题。来自UptimeRobot和New Relic的请求(以及仅来自这两者的IP)提供这些日志消息。

UptimeRobot和NewRelic报告&#39; OK&#39;。

似乎不是http_response_write抱怨的请求,而是响应。看看堆栈跟踪。它来自$ curl https://example.com -X HEAD -i HTTP/1.1 200 OK Server: nginx/1.6.2 (Ubuntu) Date: Wed, 18 Nov 2015 09:17:11 GMT Content-Type: text/html; charset=utf-8 Content-Length: 18422 Connection: keep-alive Status: 200 OK ... curl: (18) transfer closed with 18422 bytes remaining to read 独角兽(我也使用独角兽)。

我会进行更多调查并在此处添加任何调查结果。

更新:

我可以用

重现这个问题
{{1}}

所以我的旧Rails似乎没有正确支持HEAD请求。

更新:我无法在我的流浪盒或登台服务器上重现。只有与我能想到的生产不同的是SSL。

答案 1 :(得分:0)

看起来你的Uptime机器人正在发送一个错误值的标头。它应该发送 Content-length 标头,其值为0(或者根本不发送它),但它发送的是31842,这可能是错误的。

您可以将其定位到其他某个http服务器,转储所有标头并查看其发送原因或只是将正常运行时机器人更改为发送此标头。