Ruby on Rails: Springの停止/無効化方法
Ruby on Rails: Springとは?
データを先読みして、railsのアプリケーションの起動を早める効果があるようです。こういう機能を持つライブラリ?をプリローダーというそうです。
Ruby on Rails: Springの問題点。
このSpringですが、元々開発環境用向けのもののようで、商用環境には入れないで下さいと、公式ドキュメントにも記載されています。ネット上でもspringが原因でトラブルが発生した事例がいくつかありました。 実際に、私の環境でも以下のように商用環境へのコンソール接続を行った際に、あるはずのTaskクラスが呼び出せない(NameError: uninitialized constant Task)という事象が発生しました。
[user@vm01 test_app]$ bin/rails console -environment production
Running via Spring preloader in process 1046
Loading production environment (Rails 5.1.3)
irb(main):001:0>
irb(main):002:0*
irb(main):003:0* Task.last(1)
NameError: uninitialized constant Task
from (irb):3
Ruby on Rails: Spring停止方法
- 基本的に以下のコマンドで停止できるようです。
bin/spring stop
- springのステータスは以下コマンドです。
bin/spring status
- 上記のステータスコマンドで確認して、not runnningなどと表示されていてもプロセスが生きている場合があるようですので、その場合は以下のコマンドなどでプロセス確認の後、killしましょう。
ps -elf | grep spring
Ruby on Rails: Springの無効化
上記の停止方法で停止しても、今後何らかしらのタイミングでspringが復活する可能性もあるかもしれませんので、springを今後一切無効化する方法も載せておきます。
- 以下のコマンドで、binフォルダから削除します。
bin/spring binstub --remove --all
- 今後誤ってインストールされないようにするために、以下のコマンドなどでGemfileのspringの箇所をコメントアウトします。
vi Gemfile
- Rails 5.1.3 では、以下の2項目をコメントアウトしました。
gem \'spring\'
gem \'spring-watcher-listen\'
- Rails 5.1.3 では、以下の2項目をコメントアウトしました。
Ruby on Rails: 備考
公式ドキュメントによると、商用環境でbundle installを行う際は、以下のようにオプションをつけてあげればspringなどの開発環境、テスト環境用のライブラリは入らなくなるようです。
bundle install --without development test
Ruby on Rails: 参考サイト
- Springの公式ドキュメント
https://github.com/rails/spring - stackoverflow
https://stackoverflow.com/questions/39438109/rails-console-in-production-nameerror-uninitialized-constant/40457309 - spring-watcher-listenの公式ドキュメント
https://github.com/jonleighton/spring-watcher-listen