什么“WARN无法确定响应主体的内容长度。”意思是如何摆脱它?

时间:2011-08-16 17:28:45

标签: ruby-on-rails ruby webrick

自从升级到Rails 3.1后,我在开发日志中看到了这条警告消息:

  

WARN无法确定响应正文的内容长度。设置回复的内容长度或设置Response#chunked = true

这是什么意思,如何删除它?这是一个问题吗?

9 个答案:

答案 0 :(得分:229)

向Rails-Core的成员提出同样的问题:

https://twitter.com/luislavena/status/108998968859566080

答案是:

https://twitter.com/tenderlove/status/108999110136303617

  是的,没关系,没关系。需要清理它,但没有任何伤害。

答案 1 :(得分:78)

以下补丁解决了我的问题;没有警告我。

204_304_keep_alive.patch

只需在第205行编辑文件httpresponse.rb,如上面的链接所示;事实上,该链接显示了对未来Ruby版本的修正。

我在通过RVM作为单个用户安装的ruby 1.9.3-p0上使用rails 3.2.0。所以我的情况是:

~/.rvm/rubies/ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb

要更改的文件的位置因安装类型,RVM与否,甚至是多用户或单用户而异,所以我只是给出了它的最后一部分:

.../ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb

我希望这对某人有帮助。

编辑:这是提交的link,它改变了ruby项目的trunk分支中有问题的行。

答案 2 :(得分:56)

只需将Gem明确添加到Gemfile中,就可以删除警告消息:

group :development do
  gem 'webrick', '~> 1.3.1'
end

答案 3 :(得分:54)

您也可以使用Thin而不是默认的Webrick。 将其添加到Gemfile gem 'thin'

然后rails s thin将使用thin,警告将消失。

答案 4 :(得分:15)

如果您使用的是.rvm,请执行此操作以修复它...

正如JoãoSoares所提到的那样,如果你不想在发展中摆脱这个警告,那么你就可以做到这一点。

  1. 使用您喜欢的编辑器打开此文件:

    ~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb
    
  2. 转到包含此内容的行(对我而言,它确实是第206行):

    if chunked? || @header['content-length']
    
  3. 将其从this patch更改为:

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
    
  4. 保存文件并最终重启rails服务器

答案 5 :(得分:12)

这个问题已经在Ruby的trunk分支中使用commit修复了。

您可以在设置中类似地编辑此特定webrick文件。大致位置可以通过以下方式找到:

gem which webrick

要实际编辑文件:

nano \`ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"\`/httpresponse.rb

(或者代替nano,使用您最喜欢的编辑器。)

答案 6 :(得分:5)

JRuby版:如果您使用的是.rvm,请执行此操作以修复它...

正如JoãoSoares Kjellski 所提到的,如果您想要在开发中消除此警告并使用JRuby,则可以执行此操作。

  1. 使用您喜欢的编辑器打开此文件:

    ~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb
    
  2. 转到包含此内容的行(对我来说是第205行):

    if chunked? || @header['content-length']
    
  3. 将其从this patch更改为:

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
    
  4. 保存文件并最终重新启动rails服务器。

答案 7 :(得分:3)

从webrick中删除违规行的另一种解决方法。它没那么有用:

cd `which ruby`/../../lib/ruby/1.9.1/webrick/ && sed -i '.bak' -e'/logger.warn/d' httpresponse.rb

(您可能需要sudo

答案 8 :(得分:3)

添加

config.middleware.use Rack::ContentLength

到您的application.rb文件,即使使用webrick,警告也会消失。在渲染json或文本响应时,这也会在生产中正确设置Content-Length