Ruby3.0のRailsアプリケーションをを3.1にアップグレードにした際に出たエラーの対応

thumbnail

Rails6, Ruby3.0で作ったアプリケーションをRuby3.1にアップグレードした際に詰まった点をメモしておく。
ちなみにこの作業は後々Rails7にアップグレードするための前準備として行っていました。

事前にやったこと

  • bundle update
  • yarn upgrade
  • 一応Rspec通るか確認しておく

このあたりは個人で開発してるものなので雑に全部アップグレードした


作業

Ruby3.1に上げる

  • .ruby-version
  • Gemfile


bundlerのバージョン違い問題

上記でbundle installを行うと成功はするが、bundlerのバージョンが異なる旨の警告が出た
そのためGemfile.lockを削除した上でbundle installした

Unknown alias: default

上記エラーがでた
YAMLパーサーのバージョンが上がったことが原因のよう。
回避策としてGemfileでバージョンをしてインストールする。

gem "psych", "~> 3.1"


LoadError: cannot load such file

なにやらメール周りのライブラリが外されている模様?

  • LoadError: cannot load such file -- net/smtp
  • LoadError: cannot load such file -- net/pop
  • LoadError: cannot load such file -- net/imap


https://github.com/mikel/mail/pull/1439
https://github.com/rails/rails/pull/42366

とりあえず素直に追加していく。

gem "net-smtp", require: false
gem "net-pop", require: false
gem "net-imap", require: false


herokuにpushした際のエラー


   Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
       is x86_64-linux. Add the current platform to the lockfile with `bundle lock
       --add-platform x86_64-linux` and try again.
       Bundler Output: Your bundle only supports platforms ["x86_64-darwin-20"] but your local platform
       is x86_64-linux. Add the current platform to the lockfile with `bundle lock
       --add-platform x86_64-linux` and try again.


これはbundlerを上げたことによる影響らしい。
【Rails】Bundler 2.2.x以降は開発者が適切なプラットフォームを追加する必要がある

現状だとローカルのapple用のプラットフォームしか指定していなかった。
heorkuに出てるエラーの通りにプラットフォームを追加する。

bundle lock --add-platform x86_64-linux


Gemfile.lockに下記が追加される

PLATFORMS
  x86_64-darwin-20
  x86_64-linux # これ


これで完了!