目次
この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
rick No25です。
今回は、Rails2からRails3へ移行後発生したバグなどを何個か紹介。
rails2の環境
ruby 1.9.1
rails 2.3.11
rails3の環境
ruby 1.9.3
rails 3.0.7
incompatible character encodings: UTF-8 and ASCII-8BI
DB(ASCII-8BI)からview(UTF8)に表示するときにこのエラーが発生します。
解決法
「force_encoding(‘UTF-8’)」の使用
使用例
@user.name.force_encoding(‘UTF-8’)
NoMethodError: private method `readline’
ファイルをアップロードするときにこのエラーが発生します。
解決法
「tempfile.__getobj__」の使用
使用例
params[:file].tempfile.__getobj__
puts delete時の挙動
ログイン系のサイトでputsやdeleteなどを使用してリンクを押下したところ
なぜかログアウトしてしまう事象が発生。
getにはhiddenにauthenticity_tokenが設定されるが、
putsやdeleteには設定されていなかった模様。
解決法
「form_authenticity_token」の使用
使用例
link_to hoge_path(削除したいitem, :authenticity_token => form_authenticity_token), {:method => :delete}
文字参照
xmlを送信したところ文字が文字参照になっていた。
これは以前からなっていて対処もconfig/initializers以下に置いてあったが、 Rails3になってから読み込む順番が変わったのか読み込まれなくなった。
解決法
cinfig/initializersのファイル内で「rack/content_length」を読み込む
使用例
require ‘rack/content_length’
メールがtext形式
html形式のメールを送っていたがtext形式になってしまい、
タグが表示されるようになってしまった。
解決法・使用例
「ActionMailer::Base.default_content_type=”text/html”」をapplication.rbに追加
エラー時メール送信
エラー時にメールが送信されなくなった。
解決法
オーバーライドメソッドの変更
使用例
def log_error(exception)
↓
def rescue_with_handler(exception)