[ruby-list:49773] log writing failed. with rails

From: Kazuhiro NISHIYAMA <zn@...>
Date: 2014-03-06 09:34:27 UTC
List: ruby-list #49773
西山和広です。

acts-as-taggable-on が 3.0 で SQL の生成に ASCII-8BIT を使っているようで、
そのあたりをログに書き込むときに
log writing failed. "\xE3" from ASCII-8BIT to UTF-8
で失敗するようになってしまいました。

原因を調べてみるとエラーメッセージ自体は logger.rb の中で
単体で使ってみても再現しませんでした。

% ruby -v -r rails -e 'Logger.new(IO::NULL).info "\u{3042}".b'
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]
log writing failed. "\xE3" from ASCII-8BIT to UTF-8
% ruby -v -r logger -e 'Logger.new(IO::NULL).info "\u{3042}".b'
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]

さらに調べてみると rails を読み込んだときはログ出力用の File の
external_encoding が UTF-8 になっているのが変換が起きる原因のようで、

% ruby -v -r rails -e 'Logger.new(File.open(IO::NULL, "wb")).info "\u{3042}".b'
ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-darwin13.0]

のようにバイナリモードで開くようにすれば問題はおきなくなったのですが、
こういう対処で良いものなのでしょうか?


-- 
|ZnZ(ゼット エヌ ゼット)
|西山和広(Kazuhiro NISHIYAMA)

In This Thread

Prev Next