acts-as-taggable-onとact-fluent-logger-railsの組み合わせで発生する問題

Railsを使っていて結構謎な現象が起きた。
fluentdでRailsのログをS3に設置しようとしていたのだけれど、本番環境のログがうまくfluentdで処理されなかった?

現象の詳細

act-fluent-logger-railsの内部の join で incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError) が発生する。

発生条件

上記を満たしている時に、acts-as-taggable-onで日本語の含まれているタグを扱うと発生する<

原因

acts-as-taggable-onのnamedメソッド内部で、ascii-8bitとして扱うような記述があるため、クエリログがascii-8bitとなってしまっていた。この場合に日本語などのマルチバイト文字を含んでいると、joinなどの文字列処理で例外が発生してしまう。

対策

act-fluent-logger-railsへ渡すログの文字列を強制的にUTF8にする

タイトルとURLをコピーしました