👌

[Rails]モデル作成時のエラー[Rails::Application is abstract,~中略~ (RuntimeError)]

に公開

今回発生したエラー

モデル作成時に下記エラーが発生しました。

$ rails generate model Event title:string start:datetime end:datetime
/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.7.10/lib/rails/railtie.rb:229:in `initialize': Rails::Application is abstract, you cannot instantiate it directly. (RuntimeError)
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.7.10/lib/rails/engine.rb:441:in `initialize'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.7.10/lib/rails/application.rb:129:in `initialize'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.7.10/lib/rails/railtie.rb:184:in `new'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.7.10/lib/rails/railtie.rb:184:in `instance'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.7.10/lib/rails/application.rb:100:in `instance'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/railties-6.1.7.10/lib/rails/railtie.rb:206:in `method_missing'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/spring-4.3.0/lib/spring/application.rb:128:in `block in preload'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/spring-4.3.0/lib/spring/application.rb:127:in `each'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/spring-4.3.0/lib/spring/application.rb:127:in `preload'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/spring-4.3.0/lib/spring/application.rb:176:in `serve'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/spring-4.3.0/lib/spring/application.rb:158:in `block in run'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/spring-4.3.0/lib/spring/application.rb:152:in `loop'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/spring-4.3.0/lib/spring/application.rb:152:in `run'
        from /home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/gems/3.1.0/gems/spring-4.3.0/lib/spring/application/boot.rb:25:in `<top (required)>'
        from <internal:/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from <internal:/home/ec2-user/.rbenv/versions/3.1.2/lib/ruby/3.1.0/rubygems/core_ext/kernel_require.rb>:85:in `require'
        from -e:1:in `<main>'

バージョンは下記の通り。

$ rails -v
Rails 6.1.7.10
$ ruby -v
ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [x86_64-linux]

ここ数日、同様のエラー発生しているようです。
https://qiita.com/2Yeon9596/questions/bfb1e7ee1f0be096bc5d
https://github.com/rails/spring/issues/734

解決策

Gemfileに下記を追加し、springのバージョンを最新から4.2.1に変更しました。

gem 'spring', '4.2.1' #バージョンを追加

bundle installをします。下記の通り、4.3.0から4.2.1に変更されました。

$ bundle install
Fetching gem metadata from https://rubygems.org/..........
Resolving dependencies...
Using spring 4.2.1 (was 4.3.0)
Bundle complete! 17 Gemfile dependencies, 83 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

これで再度モデルを作成すると問題なく作成できました。

Springとは

https://railsguides.jp/4_1_release_notes.html#:~:text=SpringはRailsアプリケーション用,で済むようにします。

上記より引用。

SpringはRailsアプリケーション用のプリローダーです。アプリケーションをバックグラウンドで常駐させることで開発速度を向上させ、テストやrakeタスク、マイグレーションを実行するたびにRailsを起動しないで済むようにします。

参考文献

https://qiita.com/asaken_32/items/9cd1f194e9281fdb2ef9
https://kinoppyd.dev/blog/how-spring-works/
https://github.com/rails/spring

Discussion