최근 Rails 6로 버전을 올리면서 이전에는 못 봤던 버그가 새로 생겼다. 바로 옛날 브라우저로 서버에 접속하려고 하면 다음 에러가 발생하는 것이다.
Mime::Type::InvalidMimeType - "utf-8" is not a valid MIME type:
버그의 원인은 옛날 브라우저가 Accept의 내용으로 웹 표준에 맞지 않는 내용을 담고 있기 때문이었다. Mac OS의 El Capitan 버전을 쓰면서 크롬 브라우저 버젼을 올리지 않은 사람들에게 이런 버그가 발생했다.
문제는 웹 표준에 맞는 문자열을 판단하는 내용이 Rails 6에 프레임워크 내부에 그냥 정규표현식으로 박혀있었다.
적은 수라도 옛날 브라우저를 쓰는 사람도 접속시키고 싶었기 때문에 해당 코드 부분을 오버라이딩 하기로 했다.
config/initializer 내부에 mime_types.rb 파일에 다음 코드를 추가했다.
module Mime
class Type
def initialize(string, symbol = nil, synonyms = [])
# unless MIME_REGEXP.match?(string)
# raise InvalidMimeType, "#{string.inspect} is not a valid MIME type"
# end
@symbol, @synonyms = symbol, synonyms
@string = string
@hash = [@string, @synonyms, @symbol].hash
end
end
end
이제 더 이상 요청 헤더가 웹 표준에 맞지 않더라도 에러가 발생하지는 않는다.