Madogiwa Blog

主に技術系の学習メモに使っていきます。

rails勉強BotのRailsのバージョンを6.0.0.rc1にアップグレードしました 🎉

みなさん、こんばんは。まどぎわです(・∀・)

運用しているrails勉強Botrailsのバージョンを5.2.3から6.0.0.rc1にアップグレードしました🎉

twitter.com

これでrails 6の予習がはかどりますね!!

今回は、rails 5.2.3からrails 6.0.0.rc1へのアップグレード手順をメモしておきます✍

手順

アップグレード対応を行ったPRはこちらです。 github.com

流れは下記のような形で実行しました👀 * rails guideのアップグレードガイドを読む * rails 設定ファイルの更新を把握 * bundle update でrailsのアップグレード * rails app:updateで設定ファイルを更新 * テストが通ることを確認

rails guideのアップグレードガイドを読む

rails guideにはすでに5.2から6へのアップグレードガイドが記載されているので、まずはそれをみました🙋

railsguides.jp

変更点として下記が記載されていましたが、今回はTwitterBotのAPIとして運用しているだけなので特に何も対応はしませんでした👀

  • 2.1 Force SSL
  • 2.2 署名済みまたは暗号化済みcookieのpurpose情報がcookie内部に埋め込まれるようになった
  • 2.3 Action Cable JavaScript APIの変更

業務運用しているアプリケーションの場合はcookieの互換性が失われる、 Action Cableまわりに大きな変更が入っているので注意ですね⚠

rails 設定ファイルの更新を把握

rails diffというサイトで5.2.36.0.0.rc1rails newで作成されるファイルのdiffを確認できるサイトがあるので、それを確認しました👀 http://railsdiff.org/5.2.3/6.0.0.rc1

sass-railsuglifierといったフロント関連のgemが消えたようですね👀 webpackerも入ったことですし、こういったものはgemで管理するのではなくpackage.jsonで管理するようになりそうですね。

-gem 'sass-rails', '~> 5.0'
-# Use Uglifier as compressor for JavaScript assets
-gem 'uglifier', '>= 1.3.0'
-# See https://github.com/rails/execjs#readme for more supported runtimes
-# gem 'mini_racer', platforms: :ruby

coffescriptが消えたのも印象深いですね☕

-# Use CoffeeScript for .coffee assets and views
-gem 'coffee-rails', '~> 4.2'

app/assets/javascripts/application.jsが初期で作成されなくなったようで。。。

 //= link_tree ../images
-//= link_directory ../javascripts .js
 //= link_directory ../stylesheets .css

これはもうJSはSproketsではなくWebpackerで管理するような流れっぽいですね。

rails db:prepareを使ってsetupを行うようになってみたいですね👀

   puts "\n== Preparing database =="
-  system! 'bin/rails db:setup'
+  system! 'bin/rails db:prepare'

rails db:prepare  Add db:prepare rake task. by robertomiranda · Pull Request #35768 · rails/rails · GitHub

マルチDB周りの設定が各environmentのファイルに追加されました👀(楽しみ)

+  # config.active_record.database_selector = { delay: 2.seconds }
+  # config.active_record.database_resolver = ActiveRecord::Middleware::DatabaseSelector::Resolver
+  # config.active_record.database_resolver_context = ActiveRecord::Middleware::DatabaseSelector::Resolver::Session

puma.rbでスレッドの数のMINとMAXを指定できるようになったみたいですね。

+max_threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }
+min_threads_count = ENV.fetch("RAILS_MIN_THREADS") { max_threads_count }
+threads min_threads_count, max_threads_count

test_helperに並列テストの設定が入ってました。

class ActiveSupport::TestCase
+  # Run tests in parallel with specified workers
+  parallelize(workers: :number_of_processors)

気になったのは、こんなところですかね👀

bundle update railsで関連gem含めてアップグレード

bundle updateはbundle update --conservative railsで行い最低限のgemだけ更新するようにしました。 最終的に実行したコマンドは下記です 💻

bundle update --conservative rails activesupport actionpack actionview activemodel railties

rails app:updateで設定ファイルを更新

そしてrails app:updateで設定ファイルを更新しました。 基本的に特に設定周りをいじってなかったので、config/application.rb以外は上書きして、config/application.rbについては下記変更のみを入れました🙋

-    config.load_defaults 5.2
+    config.load_defaults 6.0

テストが通ることを確認

最後に既存のテストを実行して全て通ることを確認しました🍏

DEPRECATION WARNING: Single arity template handlers are deprecated. Template handlers must
now accept two parameters, the view object and the source for the view object.
Change:
  >> JbuilderHandler.call(template)
To:
  >> JbuilderHandler.call(template, source)
 (called from <top (required)> at /Users/morita.jun/Documents/repo/ruby/rails_study_bot/config/environment.rb:5)
...................................................

Finished in 0.34418 seconds (files took 2.79 seconds to load)
51 examples, 0 failures

実行時に出ていたWARNINGについては、railsのmasterでは対応したPRがマージされているようなので一旦置いときましたm( )m github.com

おわりに

今回は運用していたサービスをrails 5.2.3から6.0.0.rc1にアップグレードしたので手順をメモしました! そろそろrails 6もstableが出るかもしれないですし、予行練習にちょうどよかったです🙌 (まぁ実際の業務で触るようなアプリケーションとは規模が全然違うので、こんなにすんなり行くはずないんですが・・・)

割と設定ファイルの差分を見るとアップグレードの全体感を把握できていいですね✨

参考資料

inside.pixiv.blog