先日 Ruby on Rails でアプリ開発をする際に rails generate コマンドでモデルを作成しようとしたところ、いつまでたっても結果が返ってこない事があった。通常であれば数秒で終わるはずが数分経っても画面に何も表示されないという現象であった。
堪らず ctrl-c で強制終了すると以下のようなエラーメッセージが表示された。
$ rails g model Hoge
^CTraceback (most recent call last):
16: from bin/rails:3:in `<main>'
15: from bin/rails:3:in `load'
14: from /mnt/c/dropbox/project/example/bin/spring:15:in `<top (required)>'
13: from /home/ryomatsu/.rbenv/versions/2.6.5/lib/ruby/2.6.0/rubygems/core_ext/kernel_require.rb:54:in `require'
(省略)
2: from /home/ryomatsu/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/client/run.rb:62:in `run'
1: from /home/ryomatsu/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/client/run.rb:117:in `verify_server_version'
/home/ryomatsu/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/spring-2.1.0/lib/spring/client/run.rb:117:in `gets': Interrupt
どうやら spring がフリーズしているような気がする。
Ruby on Rails における spring というのは開発を効率よく行うためのソフトウェアで、バックグラウンドで動いて Rails の各種動作を高速化するらしい。
なので一旦 spring を無効化して試してみる事にした。
$ spring stop
Spring stopped.
もう一度 rails generate コマンドを実行する。
$ rails g model Hoge
Running via Spring preloader in process 1633
invoke active_record
create db/migrate/20200404161531_create_places.rb
create app/models/place.rb
invoke test_unit
create test/models/place_test.rb
create test/fixtures/places.yml
動いた。どうやら spring がフリーズしていたようだ。