みなさん、こんばんは。まどぎわです(・∀・)
運用しているrails勉強Botのrailsのバージョンを5.2.3から6.0.0.rc1にアップグレードしました🎉
これで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へのアップグレードガイドが記載されているので、まずはそれをみました🙋
変更点として下記が記載されていましたが、今回は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.3
と6.0.0.rc1
のrails newで作成されるファイルのdiffを確認できるサイトがあるので、それを確認しました👀
http://railsdiff.org/5.2.3/6.0.0.rc1
sass-rails
やuglifier
といったフロント関連の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が出るかもしれないですし、予行練習にちょうどよかったです🙌 (まぁ実際の業務で触るようなアプリケーションとは規模が全然違うので、こんなにすんなり行くはずないんですが・・・)
割と設定ファイルの差分を見るとアップグレードの全体感を把握できていいですね✨