С момента обновления до Rails 3.1 я вижу это предупреждение в своем журнале разработки:
WARN Не удалось определить длину содержимого тела ответа. Установите длину содержимого ответа или установите
Response#chunked = true
Что это значит и как его удалить? Это проблема?
Заданный один вопрос одному из членов Rails-Core:
https://twitter.com/#!/luislavena/status/108998968859566080
И ответ:
https://twitter.com/#!/tenderlove/status/108999110136303617
ya, это нормально. Нужно убирать его, но ничто не пострадало.
gem 'thin'
в ваш gemfile, запустите сервер с помощью rails server thin
). (К сожалению, только что заметил, что @ Скотт Лоу уже сказал это выше.)
Следующий патч решил проблему в моем случае; больше никаких предупреждений для меня.
Просто отредактируйте файл 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
Я надеюсь, что это может быть полезно кому-то.
EDIT: ссылка на фиксацию, которая изменила соответствующую строку в ветке соединительной линии проекта ruby.
Вы также можете использовать Thin вместо стандартного Webrick.
Добавьте это к Gemfile
gem 'thin'
то rails s thin
будет использовать тонкий, и предупреждение исчезнет.
Просто явное добавление Gem к Gemfile избавило меня от предупреждающих сообщений:
group :development do
gem 'webrick', '~> 1.3.1'
end
Если вы используете .rvm, сделайте это, чтобы исправить это...
Как упоминал Жоао Соарес, все кредиты ему, это то, что вы можете сделать, если не хотите избавиться от этого предупреждения при разработке.
Используйте свой любимый редактор, чтобы открыть этот файл:
~/.rvm/rubies/<ruby-version>/lib/ruby/1.9.1/webrick/httpresponse.rb
Перейдите к строке, содержащей это (для меня это была строка 206):
if chunked? || @header['content-length']
Измените его, взятый из этот патч, чтобы:
if chunked? || @header['content-length'] || @status == 304 || @status == 204
Сохраните файл и, в конечном итоге, перезапустите сервер rails
line 107
для меня.
Эта проблема была исправлена в ветке ветки Ruby с этим commit для webrick.
Вы можете отредактировать этот конкретный файл webrick аналогично в своей настройке. Примерное местоположение можно найти по адресу:
gem which webrick
Чтобы действительно отредактировать файл:
nano \`ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"\`/httpresponse.rb
(Или вместо nano используйте свой любимый редактор.)
Версия JRuby: если вы используете .rvm, сделайте это, чтобы исправить это...
Как упоминалось João Soares и Kjellski, это то, что вы можете сделать, если хотите избавиться от этого предупреждения при разработке, и вы используете JRuby.
Используйте свой любимый редактор, чтобы открыть этот файл:
~/.rvm/rubies/jruby-<version>/lib/ruby/<1.8 or 1.9>/webrick/httpresponse.rb
Перейдите к строке, содержащей это (для меня это была строка 205):
if chunked? || @header['content-length']
Измените его, взятый из этого патча, чтобы:
if chunked? || @header['content-length'] || @status == 304 || @status == 204
Сохраните файл и, в конечном итоге, перезапустите сервер rails.
Еще одно обходное решение, которое удаляет оскорбительную строку из webrick. Это просто не так полезно:
cd `which ruby`/../../lib/ruby/1.9.1/webrick/ && sed -i '.bak' -e'/logger.warn/d' httpresponse.rb
(вам может понадобиться sudo
)
Добавить
config.middleware.use Rack::ContentLength
в ваш application.rb
файл, и предупреждение исчезнет даже с webrick. Это также установит Content-Length
должным образом в производстве при рендеринге json или текстового ответа.