pとかputsとかによるデバッグだとRadRailsのコンソールで文字化ける@Rails
※開発環境はWindowsXP+RadRails, Rails自体は2.0
アクションの処理をデバッグするときとか、pとかputsとかでRadRailsのConsoleビューに表示させてるんですが、今日どうやらConsoleビューに日本語を出すと文字化けするという現象を確認しました。
に興味深いロガークラスと対処法があったので試してみたのですが、config.log_pathがどうやらlog/development.logとかで、consoleにでてこない。consoleに出てきてほしい!ファイルをいちいち開くのは面倒くさい。
あとちなみにpやpp, print, putsでデバッグすると不都合なこともあって、うちだとステージング環境と本番をApache2.2+FastCGIで動かしているんですが、その環境だとpやppとか標準出力に出力する系のメソッドを呼ぶと画面が白くなって
Application error
Rails application failed to start properly
ってなります。
なので、
- 環境がdevelopmentならSTDOUTに出力する
- 環境が非developmentならログファイルに出力する
っていう風にするのが僕にとってはベストなんですが...
なんかキレイなソリューションがほしい。
追記。
↓こいつらを入れる前にhttp://leno-ig.blogspot.com/のCharsetableLoggerをlibに置く
# controller/application.rb
class ApplicationController < ActionController::Base# Loggerのログレベルを使えるように(DEBUG, INFO, WARN, ERROR, FATAL, UNKNOWN)
include ActiveSupport::BufferedLogger::SeverityMY_LOGGER = LoggerFactory.create({
:destination => STDOUT,
:level => DEBUG,
:encode => "sjis"
})def self.mylogger
return MY_LOGGER
enddef mylogger
return self.class.mylogger
end
end
# lib/logger_factory.rb
class LoggerFactory
# クラスメソッドの定義
class << self
# ロガーを作るファクトリメソッド configはHashまたはHashWithIndifferentAccess
def create(config)
case config[:encode]
when "Shift-JIS", "shift-jis", "ShiftJIS", "SJIS", "sjis", "s"
return CharsetableLogger.new(config[:destination], config[:level], "s")
when "EUC-JP", "euc-jp", "EUC", "euc", "e"
return CharsetableLogger.new(config[:destination], config[:level], "e")
when "UTF-8", "utf-8", "UTF8", "utf8", "u"
return CharsetableLogger.new(config[:destination], config[:level], "u")
else
return CharsetableLogger.new(config[:destination], config[:level], "u")
end
end
end
end
っていうプログラムをしこんで、アクションの処理で
mylogger.debug "ほげげ〜"
みたいにしてRadRailsのコンソールにきちんとShift_JISで文字化けせずに日本語を表示させることができました。