はじめに
DBテーブルを追加する必要があり、"rails g model"コマンドを叩いたところ、ファイルが作成されずうんともすんとも言わなくなり固まってしまいました。
"ctrl + c"で終了したところ、下記のようにエラー文っぽいものが見当たらない文章が出力されて焦ったので、同じ場面の時に焦らないように備忘録にまとめようと思います。
~# bundle exec rails generate model ~
※↑ここで固まりうんともすんとも言わなくなる
※↓"ctrl + c"で下記が出力された(エラーっぽい単語が見えなくて焦りました。)
^C/usr/local/bundle/gems/spring-4.0.0/lib/spring/client/run.rb:117:in `gets': Interrupt
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/client/run.rb:117:in `verify_server_version'
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/client/run.rb:62:in `run'
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/client/run.rb:42:in `warm_run'
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/client/run.rb:35:in `call'
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/client/command.rb:7:in `call'
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/client/rails.rb:24:in `call'
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/client/command.rb:7:in `call'
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/client.rb:30:in `run'
from /usr/local/bundle/gems/spring-4.0.0/bin/spring:49:in `<top (required)>'
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/binstub.rb:11:in `load'
from /usr/local/bundle/gems/spring-4.0.0/lib/spring/binstub.rb:11:in `<top (required)>'
from /git-used-to/bin/spring:10:in `require'
from /git-used-to/bin/spring:10:in `block in <top (required)>'
from <internal:kernel>:90:in `tap'
from /git-used-to/bin/spring:7:in `<top (required)>'
from bin/rails:2:in `load'
from bin/rails:2:in `<main>'
原因
結論から言うと、"spring"(railsでの開発スピードをアップしてくれるアプリケーションプリローダーというものらしい)が今回コマンドを固まらせた原因のようです。(詳しいことは分かりませんでした)
Gemfileでよく目にするやつですね。
gem 'spring'
これが原因でrailsコマンドが固まってしまうことがたまにあるようです。
なので、"rails g"だけ動かなくなるような問題ではないみたいですね。
解決法
解決法は、"spring"を一旦止めることです。
下記のコマンドを叩いて"spring"を終了させます。(Spring stopped.が返ってくると思います。)
~ % spring stop
Spring stopped.
これを一旦stopしてあげてから、"rails g"コマンドを叩くと、しっかりファイルを作成してくれました。
わけわからん"spring"を止めてしまって良いのか
ネットで調べると結構"spring stopを叩こう"という記事が出てきたのですが、よくわかってないspringを止めてしまっていいのか?再起動できるのか?という不安が拭えずにいましたが、"spring stop"後にrailsコマンドを叩くと同時にspringが自動で動き出すそうです。
"spring status"を叩くとspringの状態をみれるので、自分でも確認してみるとしっかり動いていることが確認できました。(安心!)
~ # spring status
Spring is running:
916 spring server | アプリ名 | started 1 hour ago
975 spring app | アプリ名 | started 2 hours ago | development mode
~ #
参考