본문 바로가기

Ruby & Rails

[Rails] could not determine content-length of response body.

rails에 기본적으로 내장되어있는 웹서버인 webrick을 사용하면 

모든 assets에 대한 요청에 대해서 


[2013-09-24 13:55:51] WARN  Could not determine content-length of response body. Set content-length of the response or set Response#chunked = true


와 같은 로그가 발생한다. 문제는 static resource에 대해 건건히 로깅이 되기 때문에 정말 필요한 로그를 보기 어렵다는거...


구글링을 해보니 버그이기 때문에 버그 패치를 하라는 의견도 있고

로깅을 조절하라는 이야기도 있고..

thin 서버를 사용하면 된다는 이야기도 있다.


그래서 이것저것 해보았는데 개인적으로는 thin 서버 사용하는게 가장 나은듯해서..

thin 설치를 해서 서버를 변경하였다.


1. thin 설치

sudo gem install thin


2. Gemfile 수정

gem 'thin'


3. bundle install

bundle install


4. thin 서버 실행

rails s thin


이제 그 로그는 나오지 않는다!

그런데 문제는.. 이번엔 모든 요청에 대해 로그가 남는다.

Started GET "/assets/logo.png" for 127.0.0.1 at 2013-09-24 14:07:21 +0900


WARN만 안나온다 뿐이지.. 상황은 똑같다.

이 문제는 아래와 같이 해결하자.


1. config/initializers에 quiet_assets.rb 파일을 만든다.


2. 위 파일에 아래의 내용을 추가한다.

if Rails.env.development?

  Rails.application.assets.logger = Logger.new('/dev/null')

  Rails::Rack::Logger.class_eval do

    def call_with_quiet_assets(env)

      previous_level = Rails.logger.level

      Rails.logger.level = Logger::ERROR if env['PATH_INFO'] =~ %r{^/assets/}

      call_without_quiet_assets(env)

    ensure

      Rails.logger.level = previous_level

    end

    alias_method_chain :call, :quiet_assets

  end

end



이러면 이제 정말 끝~