- 公開日: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移行用の作業ブランチを作成します。
cd {project_folder} git branch feature/rails5.1.0
checkoutでブランチを切り替えます。
git checkout feature/rails5.1.0
準備完了です。
Gemfile修正
まず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します。
// update bundle update
bundle updateは、全ての依存関係をインストール・ダウンロードし直すことができます。
Bundle updated!が表示されれば成功です。5.0.1に対応してあれば、bundle updateはひっかからないはずです。
Upgrade 設定ファイル
Gemファイルの導入が完了したら、rails app:updateで設定ファイルを更新します。
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を開きます。
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の処理も書き換える必要があります。時間をとって乗り換えましょう。
# Use jquery as the JavaScript library #gem 'jquery-rails' gem 'rails-ujs'
インストールします。
// update bundle update Installing rails-ujs 0.1.0
インストールしたら、application.jsを修正します。
//= require jquery //= require jquery_ujs //= require turbolinks //= require_tree . ↓ //= require rails-ujs //= require turbolinks //= require_tree .
せっかく書き換えるなら、今だとTypeScriptに変更するのがいいのではないでしょうか。
Rails5.1.0起動
アプリを起動します。
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時間くらいです。あとは、テストコードを実行してデグレを確認します。
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が作成されるようにします。
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がいい感じに枯れてきたので、そろそろ本番で使っても良いかもしれないですね。
以上です。
0 件のコメント:
コメントを投稿