9
11

More than 5 years have passed since last update.

Railsのプロジェクトを Ruby1.9.3 から Ruby2.1上げる方法

Last updated at Posted at 2014-11-07

ブログより転載:http://konyu.hatenablog.com/entry/2014/11/07/173059

ツッコミ大歓迎 むしろいい方法をご教示ください。

1.9系から2系には今のところ、バージョンをあげて開発環境で動かしてみたところ大体うごいた
だからといって本番環境で動かすのは怖いので調査する

目的: Ruby2.1で動作すること

そこで1.9からの非互換性のあるものがないか調査


Ruby1.9から2.0へ非互換な機能

1.3. 互換性の無い変更点
Ruby2.0 は Ruby1.9 と完全互換ではなく、いくつか互換性の無い変更も存在します。公式のアナウンスでは特筆すべき非互換として以下の項目が挙げられています。

デフォルトのエンコーディングが UTF-8 に変更。ただしパフォーマンスに大きな影響があるかもしれず、公式リリースまでに変更される可能性があるとのことです。
標準添付ライブラリの iconv の削除(Ruby 1.9 時点で非推奨)。代わりに Ruby2.0 からは String#encode メソッドを使用します。
ABI (Application Binary Interface) の非互換。

参考: http://www.techscore.com/tech/Ruby/ruby-2.0/welcome-to-ruby-2.0/#3

iconvを使っているところに注目すればよい


Ruby2.0から2.1へ非互換な機能

Ruby 2.1.0 をリリースしました。
Ruby 2.1 では深刻な非互換もなく、速度の向上を含めた多くの改善が行われています。
どうぞご利用ください。

参考: https://www.ruby-lang.org/ja/news/2013/12/25/ruby-2-1-0-is-released/

2.0から2.1は特に何もしなくて良い


つまり以下の箇所からiconvを使っている箇所を洗い出す。

  • Gemfileで記載している、使用ライブラリ
  • 自分のコード(appやlib)

洗いだしたら次に以下のことを実施する

  • String#encode に書き換える。
  • またはgemのバージョンアップし、対応を状況を確認する
  • gemのバージョンをあげた場合、そのgemの使用箇所を動作確認し、必要があれば修正

自分のコード内には、幸い存在しなかった

使用しているgemをiconvで全文検索すると、 
以下のようにString#encodeがある場合とない場合に対応するように書いてあれば、問題が無い


def force_to_utf8(string)
  if NewRelic::LanguageSupport.supports_string_encodings?
    string.force_encoding('ISO-8859-1').encode('UTF-8')
  else
    Iconv.iconv('utf-8', 'iso-8859-1', string).join
  end
end


9
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
11