rails + mongrel_rails でeuc-jpを使うまでの道のり。
railsでeuc-jpで開発する必要があったので$KCODE="e"ってconfig/enviroment.rbに書いてみた。
起動しないorz
vendor/rails/activerecord/lib/../../activesupport/lib/active_support/multibyte/handlers/utf8_handler.rb:118: unmatched (: /( | (RegexpError) |^K|^L|^M| |<U+0085>| |<E1><9A>\200|᠎|<E2><80>\200|<E2><80>\201|<E2><80>\202|<E2><80>\203|<E2><80>\204|<E2><80>\205|<E2><80>\206|<E2><80>\207|<E2><80>\210|<E2><80>\211|<E2><80>\212|<U+2028>|<U+2029>| |<E2><81>\237|<E3><80>\200| <U+FEFF>)+\Z/ from /usr/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:27:in `gem_original_require'
こんなエラーメッセージが出たのです。
utf8_handler.rbが、utf8のコードを使ってるので、エラーを起こしてるぽいですね。
utf8_handler.rbに、$KCODE='u'ってつけると解決したんですが、freezeしないといけないのが嫌くさい。
って、よく調べると、railsの起動時にrequireやってるのでエラーをおこしてるので、
Rails::Initializer.run do |config| # 略 end $KCODE="e"
と、Initializerの後に書いてあげると解決した。
でも今度は、Webサーバにアクセスすると文字化けしてる。orz
firebug でレスポンスヘッダー見てみると、Content-Typeがtext/html; charset=utf-8 になってる!!!
HTML上に書いてたけど、mongrelが返してるみたい。
class ApplicationController < ActionController::Base # Pick a unique cookie name to distinguish our session data from others' session :session_key => '_nankanopurojekuto_session_id' before_filter :set_content_type def set_content_type @headers["Content-Type"] = "text/html; charset=euc-jp" end end
Content-Typeって気づくまでに時間かかったけど、Applicationに、フィルタかけて、@headerを変更してあげて解決した。
(全ページがhtmlを返す場合に限るけど)
もろバッドノウハウで、mongrelのContent-Typeとか見てるとcgi.rbでoptions['charset']を返す様書いてあったので
設定によっては、きちんと返せる様なので、そちらで設定するべきかも。