Что означает «ПРЕДУПРЕЖДЕНИЕ. Не удалось определить длину содержимого тела ответа».значит а как от этого избавиться? - PullRequest
320 голосов
/ 16 августа 2011

После обновления до Rails 3.1 я вижу это предупреждение в моем журнале разработки:

WARN Не удалось определить длину содержимого тела ответа. Установить длину содержимого ответа или установить Response#chunked = true

Что это значит и как я могу удалить это? Это проблема?

Ответы [ 9 ]

229 голосов
/ 01 сентября 2011

Задал один и тот же вопрос одному из членов Rails-Core:

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

И ответ:

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

да, все в порядке.Нужно его почистить, но ничего не болит.

78 голосов
/ 31 января 2012

Следующий патч решил проблему в моем случае;больше никаких предупреждений для меня.

204_304_keep_alive.patch

Просто отредактируйте файл httpresponse.rb в строке 205, как показано по ссылке выше;на самом деле ссылка показывает исправление, внесенное в будущий выпуск Ruby.

Я использую rails 3.2.0 на ruby ​​1.9.3-p0, установленный через RVM, для одного пользователя.Таким образом, местоположение в моем случае:

~/.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

Я надеюсь, что это может быть кому-то полезно.

РЕДАКТИРОВАТЬ: Это ссылка на коммит, который изменилрассматриваемая линия в магистральной ветке проекта ruby.

56 голосов
/ 26 февраля 2013

Просто добавив Gem в Gemfile, я избавился от предупреждений для меня:

group :development do
  gem 'webrick', '~> 1.3.1'
end
54 голосов
/ 20 апреля 2012

Вы также можете использовать Thin вместо Webrick по умолчанию.Добавьте это к Gemfile gem 'thin'

, тогда rails s thin будет использовать thin, и предупреждение исчезнет.

15 голосов
/ 19 января 2013

Если вы используете .rvm, сделайте это, чтобы исправить это ...

Как упоминается Жоао Соареш , все кредиты ему, эточто вы можете сделать, если не хотите избавиться от этого предупреждения при разработке.

  1. Используйте ваш любимый редактор, чтобы открыть этот файл:

    ~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb
    
  2. Перейти к строке, которая содержит это (для меня это была действительно строка 206):

    if chunked? || @header['content-length']
    
  3. Изменить его, взято из этого патча ,на это:

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
    
  4. Сохраните файл и перезапустите сервер rails

12 голосов
/ 04 августа 2012

Эта проблема была исправлена ​​в ветви ствола Ruby с помощью этого коммита для webrick.

Вы можете редактировать этот конкретный файл webrick аналогично в вашей настройке.Приблизительное местоположение можно найти по:

gem which webrick

Чтобы отредактировать файл:

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

(Или вместо nano, используйте ваш любимый редактор.)

5 голосов
/ 19 марта 2013

Версия JRuby: если вы используете .rvm, сделайте это, чтобы исправить это ...

Как уже упоминалось Жуан Соареш и Кьельски, это то, что вы можете сделать, если хотите избавиться от этого предупреждения при разработке и используете JRuby.

  1. Используйте ваш любимый редактор, чтобы открыть этот файл:

    ~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb
    
  2. Перейти к строке, содержащей это (для меня это была строка 205):

    if chunked? || @header['content-length']
    
  3. Изменить его, взято из этот патч , к этому:

    if chunked? || @header['content-length'] || @status == 304 || @status == 204
    
  4. Сохраните файл и в конечном итоге перезапустите сервер rails.

3 голосов
/ 10 марта 2015

Добавьте

config.middleware.use Rack::ContentLength

в ваш файл application.rb, и предупреждение исчезнет даже при использовании webrick.Это также правильно установит Content-Length в рабочем состоянии при рендеринге json или текстового ответа.

3 голосов
/ 20 января 2012

Еще один обходной путь, который удаляет оскорбительную строку из webrick. Это просто не так полезно:

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

(вам может понадобиться sudo)

...