
rails コマンドを入力したら何も応答しなくなりました…
このような問題を解決します。
この問題は Rails5や Rails6 でもしばしば発生します。
本記事では「rails コマンドがフリーズしてなにもできなくなった」という方のために解説していきます。
rails コマンドがフリーズする状況
rails での開発中によく使う
rails s
や
rails db:migrate
といったコマンドをいつものように実行していたら、ターミナルが何も応答しなくなるという状況です。
結論: spring stop を実行しましょう
こういうときは
spring stop
というコマンドを実行しましょう。
rails コマンドがフリーズ時は ctrl-c によるコマンドの停止も効かなくなっていることがあります。
そのような場合は、別のターミナルを立ち上げてそちらで spring stop コマンドを実行しましょう。
ただし、bundler でプロジェクトフォルダにインストールしている場合は
bundle exec spring stop
の場合もあります。
手元のプロジェクトの状況にあわせて使い分けてください。
spring って何?
spring は Ruby on Rails の preloader(プリローダ)と呼ばれるコマンドです。
プリ(前もって) + ロード(読み込む)ということをします。
何を読み込むかというと、プロジェクト内のプログラムコードです。
spring はプロジェクトのプログラムコードを読み込んでバックグラウンドで起動しておくことで、rails コマンドの高速化をはかるためのソフトウェアです。
これによって開発時に頻繁に実行する rails コマンドが短時間で実行できるようになり、開発効率が向上します。
spring のせいで rails コマンドがフリーズすることも
spring がおかしくなるとrails コマンドが何も応答しなくなります。
よくある場面としては
- プロジェクトを作り直す
- git などのバージョン管理でかなり昔のコードに戻す
など、プロジェクト内の多くのファイルが変わるときに発生しやすいです。
そのような場合は落ち着いて spring stop コマンドを実行しましょう。
まとめ
プログラミング初学者にとって rails コマンドがフリーズすると何をして良いのか分からなくなります。
エラーメッセージを出してくれればそこを起点に調べることはできます。
しかしフリーズしてしまうとエラーメッセージすら表示されないためです。
その他の原因の可能性もありますが、経験上 Rails 初心者がおこしがちなトラブルのトップクラスに入ります。
まず spring がおかしくなっている可能性を考慮して spring stop コマンドを実行してみてください。