2017年5月5日金曜日

【Rails5.1.0】 Rails5.0.1からRails5.1.0にアップグレードする。

  • 公開日:2017年05月05日

記事概要

ようやくRails5.1.0がリリースされたのでアップグレードしました。まとめ記事です。

環境

  • centos6.5
  • Rails5.0.1 → Rails5.1.0
  • ruby2.3.0
  • rbenv
  • unicorn
  • whenever

はじめに

Rails5.1.0は、Rails5.0.x系と比較すると変更点が多いです。以前の記事で5.0.x系との差異を記載しているのでそちらを参考にしてください。

移行用の作業branchの作成

以前の記事で記載しているように、2ヶ月ほど前にRails5.1.0 beta1で、移行テスト済みなので一気に作業をやっていきます。
Railsのバージョンアップをする場合は、betaの段階で1度テストをしておくことをお勧めします。

gitでrails5.1.0移行用の作業ブランチを作成します。

terminal

cd {project_folder}
git branch feature/rails5.1.0

checkoutでブランチを切り替えます。

terminal

git checkout feature/rails5.1.0

準備完了です。

Gemfile修正

まずGemfileを修正します。

{project_folder}/Gemfile

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '5.0.1'

↓

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '5.1.0'

gem 'rails', '5.1.0'に修正し、updateします。

terminal

// update
bundle update 

bundle updateは、全ての依存関係をインストール・ダウンロードし直すことができます。

Bundle updated!が表示されれば成功です。5.0.1に対応してあれば、bundle updateはひっかからないはずです。

Upgrade 設定ファイル

Gemファイルの導入が完了したら、rails app:updateで設定ファイルを更新します。

terminal

bundle exec rails app:update

ファイル更新の有無を聞かれるので、更新が必要なファイルのみ変更します。
私の環境では以下のようにしました。

  • config/routes.rb → 更新しない
  • config/application.rb → 更新しない
  • config/secrets.yml → 更新する
  • config/cable.yml → 更新する
  • config/puma.rb → 更新する
  • config/environments/development.rb → 更新する
  • config/environments/production.rb → 更新する
  • config/environments/test.rb → 更新する
  • config/initializers/assets.rb → 更新する
  • config/initializers/new_framework_defaults.rb → 更新しない
  • bin/setup → 更新しない
  • bin/update → 更新しない

更新後は、git diffでファイルを比較して必要な設定だけ元に戻します。

config/environments/production.rb

Rails5.1.0では、config.read_encrypted_secrets = trueが追加されました。
暗号の管理方法が変わりました。

既存のsecrets.ymlでも動くので、Encrypted secretsの導入は少し待ってからの方が良いかもしれません。これだと管理が煩雑になって、まだデメリットの方が多い気がします。

Rails5.1.0 Encrypted secretsの対応

暗号の管理方法が変更されたので対応します。terminalを開きます。

terminal
bin/rails secrets:setup

config/secrets.yml.key
append  .gitignore
create  config/secrets.yml.enc

You can edit encrypted secrets with `bin/rails secrets:edit`.
Add this to your config/environments/production.rb:
config.read_encrypted_secrets = true

これだけです。パスワードの入ったsecrets.yml.keyファイルは、.gitignoreに自動で追加されます。 config/secrets.yml.encはgitで管理可能です。pushしてもOKです。

また、config/environments/production.rbにconfig.read_encrypted_secrets = trueが追加されていることも確認してください。
あとは、本番でconfig/secrets.yml.keyのuploadを忘れないようにしましょう。開発環境で有効にする必要はないとは思いますが、本番と同じにしたい人はconfig.read_encrypted_secrets = trueを追加しても良いと思います。

secrets.yml.keyは紛失しないように忘れずに別管理にします。(この辺がセキュリティのためとはいえ納得いかないとこですね。面倒くさい。)

Rails5.1.0 rails-ujs対応

rails-ujsを導入すれば、jquery_ujsが不要になります。jqueryの処理に依存している人は、jqueryの処理も書き換える必要があります。時間をとって乗り換えましょう。

config/environments/development.rb
# Use jquery as the JavaScript library
#gem 'jquery-rails'

gem 'rails-ujs'

インストールします。

terminal

// update
bundle update 

Installing rails-ujs 0.1.0

インストールしたら、application.jsを修正します。

assets/javascript/application.js

//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require_tree .

↓

//= require rails-ujs
//= require turbolinks
//= require_tree .

せっかく書き換えるなら、今だとTypeScriptに変更するのがいいのではないでしょうか。

Rails5.1.0起動

アプリを起動します。

terminal

rbenv exec bundle exec rails s -b 0.0.0.0
=> Booting WEBrick
=> Rails 5.1.0.beta1 application starting in development on http://0.0.0.0:3000
=> Run `rails server -h` for more startup options
[2017-03-20 14:24:05] INFO  WEBrick 1.3.1
[2017-03-20 14:24:05] INFO  ruby 2.3.0 (2015-12-25) [x86_64-linux]
[2017-03-20 14:24:05] INFO  WEBrick::HTTPServer#start: pid=10639 port=3000

コンソールにRails 5.1.0 applicationが表示され、画面が表示されれば成功です。

だいたいここまでで1時間くらいです。あとは、テストコードを実行してデグレを確認します。

terminal

bundle exec rspec

Finished in 1 minute 58.72 seconds (files took 7.84 seconds to load)
230 examples, 0 failures, 14 pending

問題ありませんでした。DEPRECATION WARNINGで修正可能なエラーは今のうちに修正します。Rails5.2.0の対応も済ませてしまいましょう。

capistrano

capistranoも修正します。config/secrets.yml.keyにもSymbolic linkが作成されるようにします。

config/deploy.rb

set :linked_files, %w{config/database.yml}

↓

# Default value for :linked_files is []
set :linked_files, %w{config/database.yml config/secrets.yml.key}

ググるとupload処理をconfig/deploy.rbに記述しているケースをちょくちょく見かけます。この場合、ファイルがないとdeploy:checkが通らなくなるので、やらない方が良いと思います。ファイルは直接アップロードしておくのがcapistranoの仕様になってます。フォルダは自動生成してくれますが、ファイルはしてくれません。

リリース

capistrano3を使っていつも通りリリースすればOKです。少し時間がかかります。一通りの動作確認はしておきましょう。

まとめ

Rails5.0.1からRails5.1.0のアップデートは、それなりに手間がかかると思います。特にフロントエンドが複雑なWEBアプリだと苦戦するかもしれません。
私は既にRails5.1.0にアップロードしましたが、Fix版が出て安定してからでも良いかなと思いました。

あとはそろそろ、Ruby2.4.0への更新とリファクタリングも済ませてしまうと良いでしょう。

あとはdockerがいい感じに枯れてきたので、そろそろ本番で使っても良いかもしれないですね。

以上です。

PICK UP オススメ書籍

運営サイト(railsで作成しています)


関連記事

この記事がお役にたちましたらシェアをお願いします

このエントリーをはてなブックマークに追加

0 件のコメント:

コメントを投稿

Related Posts Plugin for WordPress, Blogger...