Nat*_*ird 320 ruby ruby-on-rails webrick
自从升级到Rails 3.1后,我在开发日志中看到了这条警告消息:
警告无法确定响应正文的内容长度.设置响应或集的内容长度
Response#chunked = true
这是什么意思,我该如何删除它?这是个问题吗?
Lui*_*ena 229
向Rails-Core的成员提出同样的问题:
https://twitter.com/luislavena/status/108998968859566080
答案是:
https://twitter.com/tenderlove/status/108999110136303617
呀,没关系.需要清理它,但没有任何伤害.
jas*_*res 78
以下补丁解决了我的问题 ; 没有警告我.
只需在第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
Run Code Online (Sandbox Code Playgroud)
要更改的文件的位置根据安装类型,RVM与否,甚至是多用户或单用户而有所不同,所以我只是给它的最后一部分:
.../ruby-1.9.3-p0/lib/ruby/1.9.1/webrick/httpresponse.rb
Run Code Online (Sandbox Code Playgroud)
我希望这对某人有帮助.
编辑:这是在ruby项目的trunk分支中改变了有问题的行的提交的链接.
oot*_*vak 56
只是明确地将Gem添加到Gemfile中就可以为我删除警告消息:
group :development do
gem 'webrick', '~> 1.3.1'
end
Run Code Online (Sandbox Code Playgroud)
Kje*_*ski 15
如果您正在使用.rvm,请执行此操作以修复它...
正如JoãoSoares所提到的那样,如果你不想在发展中摆脱这个警告,那么你可以做到这一点.
使用您喜欢的编辑器打开此文件:
~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb
Run Code Online (Sandbox Code Playgroud)转到包含此行的行(对我而言,它实际上是第206行):
if chunked? || @header['content-length']
Run Code Online (Sandbox Code Playgroud)将此修补程序中的内容更改为:
if chunked? || @header['content-length'] || @status == 304 || @status == 204
Run Code Online (Sandbox Code Playgroud)保存文件,最终重启rails服务器
Mar*_*ell 12
这个问题已经在Ruby的trunk分支中修复了,我们提交了webrick.
您可以在设置中类似地编辑此特定webrick文件.大致的位置可以通过以下方式找到:
gem which webrick
Run Code Online (Sandbox Code Playgroud)
要实际编辑文件:
nano \`ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"\`/httpresponse.rb
Run Code Online (Sandbox Code Playgroud)
(或者代替nano,使用您最喜欢的编辑器.)
JRuby版本:如果您使用的是.rvm,请执行此操作以修复它...
正如提到的若昂·苏亚雷斯和Kjellski,这就是,如果你想摆脱对发展这一警告的,你正在使用JRuby你可以做什么.
使用您喜欢的编辑器打开此文件:
~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb
Run Code Online (Sandbox Code Playgroud)转到包含此行的行(对我来说是第205行):
if chunked? || @header['content-length']
Run Code Online (Sandbox Code Playgroud)将此修补程序中的内容更改为:
if chunked? || @header['content-length'] || @status == 304 || @status == 204
Run Code Online (Sandbox Code Playgroud)保存文件,最终重启rails服务器.