はじめに
現在個人プロジェクトで
- M1 Mac
- Ruby3.1.0
- Rails7.0.1
という環境での開発を試しています。今までは
- Intel Core i7
- Ruby2.x
- Rails6.x
という環境だったので、やはり動くところ、動かないところが出てきます。
(特に、Docker周りは変なバグを踏まないか戦々恐々としています)
今回はRails7のプロジェクトにて、springのバージョンのせいでrails consoleの実行が失敗した件についてです。
事象
発生したエラーはこんな感じで、 bundle exec rails c
を実行した時に発生しました。
/usr/local/bundle/gems/spring-2.1.1/lib/spring/application.rb:103:in `block in preload': undefined method `mechanism=' for ActiveSupport::Dependencies:Module
ActiveSupport::Dependencies.mechanism = :load
^^^^^^^^^^^^ (NoMethodError)
原因
rails newをした時にはspring 4.0.0でプロジェクトが作成されていたのですが、gemを整理してbundleし直した時にspringのバージョンが2.1.1に巻き戻っていたようです。
↓該当の差分
対処方法
ググってたらRails Guideにてそのものズバリな記事を見つけました。
ここに「springは最低でも3.0.0にしてね!」と書いてあったおかげで差分があることに気づけました。
新規でプロジェクトを立ち上げた時には問題なくrails consoleが使えていたので、原因を見失っていましたが、springのバージョンを戻したことで問題なく動いています。
デフォルトでrails newした時には4.0.0でプロジェクトが作成されるため滅多に踏むバグではないかも知れませんが、
- 他のgemとの依存関係でたまたま自分のようにバージョンが巻き戻ったケース
- Rails6以前のプロジェクトをRails7に上げた際、springのバージョンを上げ忘れたケース
で引っかかる可能性があります。
rails consoleだけでなく、rspecなどのspringを使うコマンド実行でも発生する可能性があるため、 Rails7プロジェクトで undefined method 'mechanism=' for ActiveSupport::Dependencies:Module
というエラーを発見したらspringがバージョン2系以前になってないか確認してみてください。