5
1

More than 1 year has passed since last update.

Rails7でspring起因でrails consoleが立ち上がらなかった問題の解決方法

Last updated at Posted at 2022-01-27

はじめに

現在個人プロジェクトで

  • 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に巻き戻っていたようです。

↓該当の差分

スクリーンショット 2022-01-27 19.50.44.png

対処方法

ググってたら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系以前になってないか確認してみてください。

5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1