로그에서 ASCII-8bit에서 UTF-8으로 인코딩 변환 오류

로그에서 이 경고가 표시되고 있는데, 어디서 오는 건지 모르겠습니다. 이전에는 본 적이 없었고, 3.2.0에서 3.3.0으로 업그레이드한 후에 시작되었습니다.

해당 타임스탬프 주위에서는 이 경고가 유일하며, 다른 오류나 경고는 없습니다(처음에는 이메일 관련 문제인 줄 알았지만, 해당 시간대에 이메일 오류나 반송된 이메일을 찾지 못했습니다).

설치된 버전

3.3.0.beta2-dev

(777b8f6d51)

Message (4 copies reported)

RequestTracker.get_data failed : Encoding::UndefinedConversionError : "\xA1" from ASCII-8BIT to UTF-8

Backtrace

/var/www/discourse/lib/middleware/request_tracker.rb:190:in `encode'
/var/www/discourse/lib/middleware/request_tracker.rb:190:in `get_data'
/var/www/discourse/lib/middleware/request_tracker.rb:207:in `log_request_info'
/var/www/discourse/lib/middleware/request_tracker.rb:320:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/engine.rb:530:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/railtie.rb:226:in `public_send'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/railties-7.0.8.1/lib/rails/railtie.rb:226:in `method_missing'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-2.2.9/lib/rack/urlmap.rb:74:in `block in call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-2.2.9/lib/rack/urlmap.rb:58:in `each'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/rack-2.2.9/lib/rack/urlmap.rb:58:in `call'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:634:in `process_client'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:739:in `worker_loop'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:547:in `spawn_missing_workers'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/lib/unicorn/http_server.rb:143:in `start'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/unicorn-6.1.0/bin/unicorn:128:in `<top (required)>'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `load'
/var/www/discourse/vendor/bundle/ruby/3.2.0/bin/unicorn:25:in `<main>'

특정 웹 크롤러와 관련된 문제가 있는 것 같습니다. 사용자에게는 영향을 주지 않아야 합니다. :thinking:

여기서 크롤러의 사용자 에이전트를 UTF-8로 인코딩하는 데 문제가 있습니다. 잘못된 바이트가 포함되어 있기 때문입니다.
scrub 메서드가 이를 처리하도록 되어 있습니다. 아마도 :undef 매개변수를 사용하면 도움이 될 수 있습니다:
user_agent.encode("utf-8", :undef => :replace)

image

[51] pry(main)> string = "hello \xa1\x28world\x29".force_encoding("ASCII-8BIT")
=> "hello \xA1(world)"
[52] pry(main)> string.encode('utf-8')
Encoding::UndefinedConversionError: "\xA1" from ASCII-8BIT to UTF-8
from (pry):52:in `encode'
[53] pry(main)> string.encode('utf-8', :undef => :replace)
=> "hello �(world)"
4개의 좋아요

좋아 보이네요. PR 올릴까요?

2개의 좋아요

수정 사항이 병합되었습니다. :+1:

4개의 좋아요

잘했어! :clap: :smiley: :dragon:

2개의 좋아요

이 주제는 3일 후 자동으로 닫혔습니다. 더 이상 새로운 답글을 작성할 수 없습니다.