“경고 응답 본문의 내용 길이를 결정할 수 없습니다.” 의미와 그것을 제거하는 방법?


320

Rails 3.1로 업그레이드 한 후 개발 로그에 다음과 같은 경고 메시지가 나타납니다.

경고 응답 본문의 내용 길이를 결정할 수 없습니다. 응답의 내용 길이 또는 설정Response#chunked = true

이것이 무엇을 의미하며 어떻게 제거 할 수 있습니까? 이게 문제가 되나요?


1
여기서도 JS를 통한 원격 호출 일 때 발생합니다.
Tim Baas

2
오늘 Ruby 1.9.3으로 업그레이드하자마자 이것을 시작했습니다. 전에는 보지 못했습니다. 루비 1.9.3에서 WEBrick의 변경으로 인한 것 같아요.
Tyler Rick

50
실제로 WEBrick 문제입니다. 그 동안 WEBrick 대신 'thin'gem을 Gemfile에 추가하고 Rails를 부팅 할 수 있습니다 rails s thin. 타다! 더 이상 경고가 없습니다.
Scott

답변:


229

Rails-Core 회원 중 한 사람에게도 같은 질문을했습니다.

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

답은

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

그래, 괜찮아 그것을 청소해야하지만 아무것도 아프지 않습니다.


9
참고로, 메시지가 귀찮 으면 해결 방법으로 씬을 사용할 수 있습니다 ( gem 'thin'gemfile에 추가 하고을 사용하여 서버를 시작하십시오 rails server thin). (oops, @Scott Lowe가 이미 위에서 말한 것을 알았습니다.)
fearless_fool

280
나는 이런 종류의 것들이 "아무것도 아프지 않다"는 범주에 놓일 때이 성가신 것을 발견합니다. 수천 명의 사람들이 무슨 일이 일어나고 있는지 파악하는 데 시간을 낭비한다는 사실만으로도 이의를 제기 할 수 있습니다.
Mark Fraser

16
@ KenThompson 문제는 Rails가 아닌 Webrick입니다. Webrick은 연결 유지 연결을 지원하지 않으므로 현재보고있는 경고 / 문제가 발생합니다. 웹에 적합한 / 더 나은 웹 서버 (예 : 씬 또는 승객 독립형)를 사용하는 것이 좋습니다. 다음 버전의 Ruby에서이 문제가 해결 될 것입니다.
Luis Lavena

3
개발 PC의 웹릭 서버는 동일한 .js.erb 파일을 두 번 렌더링합니다. nginx를 실행하는 프로덕션 서버에서 두 번 렌더링 문제가 사라집니다. 따라서 이것은 우리와 같은 경우에 실제 문제입니다.
user938363

2
답변에는 링크 대신 트위터 게시물의 내용이 포함되어야합니다.
Pedro Rolo

78

다음 패치 는 필자의 경우 문제해결했습니다 . 더 이상 경고하지 않습니다.

204_304_keep_alive.patch

위의 링크에 표시된대로 205 행에서 httpresponse.rb 파일을 편집하십시오. 사실이 링크는 향후 루비 릴리스에 대한 수정 사항을 보여줍니다.

RVM을 통해 단일 사용자로 설치된 Ruby 1.9.3-p0에서 레일 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

나는 이것이 누군가에게 도움이되기를 바랍니다.

편집 : 이것은 루비 프로젝트의 트렁크 분기에서 문제의 줄을 변경 한 커밋에 대한 링크 입니다.


나는 데비안 스퀴즈를 사용하고 있으며, 설치된 루비 버전 1.9.3p194를 설치 했는데이 문제가 계속 발생합니다. Ruby의 날짜는 2012-04-20이고 tenderlove의 패치 날짜는 2011 년 12 월 13 일 07:30:14입니다. 그러나 여전히 발생합니다.
kristianp

데비안 스퀴즈에서 RVM 설치 Ruby 버전 1.9.3-p327 WEBrick은 여전히 ​​이러한 문제가있는 경고를 표시합니다.
MarkDBlackwell

56

Gem을 Gemfile에 명시 적으로 추가하면 경고 메시지가 사라졌습니다.

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

5
예, 저도 요 이것이 작동하는 이유에 대한 단서가 Feature # 5481 Gemifying Ruby 표준 라이브러리 : " '가짜 보석'때문에 사용자가 gem [ 'webrick']을 명시 적으로 쓰지 않으면 'gem update'에 의해 설치된 stdlib의 새로운 파일은 무시 됩니다. "
MarkDBlackwell

2
이것은 '무시'또는 '패치 웹릭'보다 훨씬 낫습니다. 감사합니다!
nessur

54

기본 Webrick 대신 Thin을 사용할 수도 있습니다. 이것을 추가하십시오Gemfile gem 'thin'

다음 rails s thin얇은 사용되며, 경고가 사라집니다.


예. 이것이 내가 최근 몇 개월 동안 끝낸 것입니다. Ryan Bates는 최근 Railscast에서 언급했습니다.
네이트 버드

1
@cam 노래 : 거의 맞음 : 레일의 얇은 부분은 Webrick 대신 얇은 것을 사용하고 경고는 사라집니다.
fearless_fool

1
내가 넣어 thin에서 development그룹. 4 실행할 때 자동으로 따기 보인다 레일rails s
그릴

15

.rvm을 사용하는 경우이 작업을 수행하여 문제를 해결하십시오.

João Soares가 언급했듯이 , 그에게 모든 크레딧이 있습니다. 개발에 대한이 경고를 없애고 싶지 않다면 할 수있는 일입니다.

  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. 파일을 저장하고 레일 서버를 다시 시작하십시오


1
감사합니다! 이 되었습니까 line 107나를 위해.
gbdev

12

이 문제는 webrick에 대한 커밋 과 함께 Ruby의 트렁크 분기에서 수정되었습니다 .

설정에서이 특정 웹릭 파일을 유사하게 편집 할 수 있습니다. 대략적인 위치는 다음으로 찾을 수 있습니다.

gem which webrick

실제로 파일을 편집하려면

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

(또는 nano 대신에 좋아하는 편집기를 사용하십시오.)


위의 멋진 명령 줄 (유머 에디터, nano 포함)은 속성없이 해제되었으며 여기 RailsRock 사이트에 저작권이 있습니다 .
MarkDBlackwell

백틱은 아마도 탈출해서는 안됩니다. 따라서 실제로 다음과 같아야합니다 nano `ruby -e"print %x{gem which webrick}.chomp %Q{.rb\n}"`/httpresponse.rb..
MarkDBlackwell

5

JRuby 버전 : .rvm을 사용하는 경우이를 해결하려면이 작업을 수행하십시오 ...

João SoaresKjellski가 언급했듯이 개발에 대한 경고를 없애고 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. 파일을 저장하고 레일 서버를 다시 시작하십시오.


@schwabsauce 첫 번째 명령을 제외하고 나머지는 JRuby에 국한되지 않습니다. 파일을 찾는 데 도움이됩니다. 명확성을 위해 다른 지침이 반복됩니다.
크림 보

3

webrick에서 문제를 일으키는 라인을 제거하는 또 다른 해결 방법. 그다지 유용하지 않습니다.

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

(필요할 수도 있습니다 sudo)


3

더하다

config.middleware.use Rack::ContentLength

당신에게 application.rb파일 및 경고도에 WEBrick으로 사라집니다. 이것은 Content-Lengthjson 또는 텍스트 응답을 렌더링 할 때 프로덕션에서 올바르게 설정 됩니다.


keep-alive 패치로 문제를 숨기는 대신 실제로 문제를 해결한다는 아이디어가 마음에 듭니다. 불행하게도,이 제안은 단지 경고의 두 배를 뱉어 냈습니다.
labyrinth
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.