ホーム DoRuby Ruby on Rails Rails2からRails3へ移行後の色々

Ruby on Rails Rails2からRails3へ移行後の色々

この記事はアピリッツの技術ブログ「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)

記事を共有

最近人気な記事