開発中のプロジェクトでrails6 -> rails7にした
基本は
https://railsguides.jp/upgrading_ruby_on_rails.html
の手順を守ればOKですがdocker 環境のせいかbundle update
が一晩かけても終わらなかったので、Gemfile.lock
を削除してGemfile
のrailsのバージョンを書き換えてbundle install
しました。
変更点はこれだけです。
gem 'rails', '~> 6.1.4', '>= 6.1.4.1' gem 'rails', '~> 7.0.2', '>= 7.0.2.2' gem 'rails-i18n', '~> 6.0.0' gem 'rails-i18n', '~> 7.0.0'
webpackerはとりあえず使い続ける選択をしたので大きな問題はありませんでした。
ただ、rspecでsessionをmockしているところが動かなくなってました
allow_any_instance_of(ActionDispatch::Request) .to receive(:session) .and_return({id: 1})
理由はちゃんとわかってないですが、下記のようなヘルパーを作って対処しました
def initialize_mock_session mock_session = allow_any_instance_of(ActionDispatch::Request::Session) # おまじない。↓のエラーの対策 # Please stub a default value first if message might be received with other args as well. mock_session.to receive(:[]).and_call_original mock_session end # 利用方法 mock_session.to receive(:[]).with(:id).and_return(1)