Ruby 1.9とRails 3.0を使っているとよく出るというエラー。あるいはSQLiteも原因のひとつかもしれない?
incompatible character encodings: UTF-8 and ASCII-8BIT
ググると色々情報が出てくるけど、あまり綺麗な対応方法が見つからない...
エラーのFull Traceを見てみたらこうなってた。
vendor/bundle/ruby/1.9.1/gems/activesupport-3.0.7/lib/active_support/core_ext/string/output_safety.rb:80:in `concat'
output_safety.rbを見てみると、ここにパッチを当てれば対応できそう。
でもbundlerを使っているで、インストールの度にパッチ当てなきゃとか良くない。
Rails本体には手を入れないモンキーパッチで解決したい。する。
まず、lib/output_safty_encoding_patch.rbを作る。
module ActiveSupport class SafeBuffer < String def concat(value) if value.html_safe? super(value.force_encoding('utf-8')) else super(ERB::Util.h(value.force_encoding('utf-8'))) end end alias << concat end end
続いて、config/application.rbの中に次のように書いておく。
require 'output_safty_encoding_patch'
これで解決した。
でも完全に解決したかどうかは分かりません。