Rails – Ruby 1.9上のアプリケーションを翻訳します

そのため、Ruby 1.8.7で実行されている既存のRuby on Railsアプリケーションがあります。 「動作する-触らない」と思われるでしょう! ただし、将来開発およびサポートする予定のアプリケーションのルビー1.9.xへの移行は避けられません 次の理由から:





始める前に



バージョン1.9では、ローカル変数、ハッシュ、文字などの動作に関して多くの小さな変更が導入されました。新しいバージョンへの移行が問題なく機能することを確認する唯一の(私の意見では)有効な方法は、自動テストで十分なカバレッジを持つことです。

つまり、テストをまだ作成していない場合(またはテスト範囲がわずかである場合)、新しいバージョンにアップグレードする前にテストを作成する必要があります。

ほとんどの場合、コードを変更する必要があります-バージョン管理システムに新しいブランチを作成して、そこで作業します。



RVM



Rubyバージョンを管理するには、Rubyバージョンマネージャー( https://rvm.io )を使用します。 RVMにまだ遭遇していない場合は、 http: //habrahabr.ru/post/120504を参照してください 。 RVMを使用しても、既にインストールされているインタープリターに悪影響を与えることはなく、いつでもロールバックできます。

RVMを使用してruby 1.9.3をインストールします。

$ rvm install 1.9.3





このコマンドは必要なソースをダウンロードして収集しますが、通常数分かかります。 理想的な状況では、ユーザーの関与は必要ありません。 ただし、OSの構成によっては、ビルドにパッケージのdevバージョンが必要な場合があります(インストールスクリプトが報告するパッケージ)。

インストールが成功したら、インタープリターとしてruby 1.9.3を選択します。

$ rvm use 1.9.3





システムインタープリターに戻るには、次のように入力します。

$ rvm use system







バンドラー



rubyを更新したら、Bundlerを使用して、アプリケーションに必要なgemを再インストールする必要があります。

$ cd /path/to/app





$ bundle install





gemは同じパス(vendor / bundleなど)にインストールされますが、異なるサブディレクトリ(ruby / 1.8 / gemではなくruby / 1.9.3 / gems)にインストールされます。

Gemfileでgemのバージョンを修正した場合、非常に古いバージョンのgemは新しいrubyと互換性がない可能性があることに注意してください。



コードを修正する



ruby 1.9と必要なgemをインストールした後、テストを実行し、コードの更新に関する作業範囲を評価します。 一般的な問題について説明します。



エンコーディング:utf-8



ruby 1.9では、文字列エンコーディングの動作原理が大幅に変更されました( http://yehudakatz.com/2010/05/05/ruby-1-9-encodings-a-primer-and-the-solution-for-rails/を参照してください。 http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings )。 ここで、ファイルのエンコードは、ファイルの最初の行で明示的に指定する必要があります。 たとえば、UTF-8で作業している場合、各.rb / .rakeファイルの先頭に次の形式の行を追加する必要があります。

# encoding: utf-8





これは自動的に行うことができます(たとえば、 http//leonid.shevtsov.me/ru/rasstanovka-direktivy-encoding-utf-8-dlya-ruby-1-9ほどhttps://github.com/m- ryan / magic_encoding



String.encode et al。



文字列のエンコードを変更するためのいくつかの便利な機能が利用可能になりました( http://ruby-doc.org/core-1.9.3/String.html#method-i-encodeなどを参照)-Iconvを使用する必要はなくなりました。

Base64を使用している場合、Base64.encode64 / decode64の出力は定義によりASCIIであり、UTF-8に変換する必要があることに注意してください。

Base64.decode64('SGVsbG8sIHdvcmxkIQ==').encode('UTF-8')







展開



ロールアウト時には、アプリケーションのソースコードとWebサーバーの構成の両方を更新する必要があります。 作業のダウンタイムを許可しない場合、いくつかのオプションがあります。



  1. ruby 1.9および1.8で同様に動作し、Webサーバーのみを再構成する完全に後方互換性のあるコードを記述します。
  2. 更新されたプロジェクトを別のIPまたはポートで発生させ、テスト後、ユーザーの透過的な置換を実行します(リバースプロキシを使用するか、DNSを変更します)。


できた!



結果をお楽しみください。



All Articles