その他
    ホーム 技術発信 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)

    記事を共有