

最近PCの空きメモリが少なくなっているなあと思ったら、複数のRailsアプリでSpringが起動しっぱなしになっていることに気がつきました。（Macのアクティビティモニタで確認しました）

`spring stop` してやるとプロセスが停止してメモリが解放されるのですが、いろんなRailsアプリを行き来していると毎回忘れずに stop
させるというのも現実的ではありません。

たとえば、Powのように一定時間アイドル状態になっていると自動的にSpringを停止できたりすれば、不要なメモリの消費を抑えられると思います。

何らかの形で起動しっぱなしのSpringを止めたいのですが何かいい方法はないでしょうか？


CC BY-SA 3.0
2015-01-30T09:08:59.257
5616
2015-07-30T14:25:10.377
2015-07-30T14:25:10.377
754
85
question
ruby-on-rails rails-spring
一定時間アイドル状態になっているSpringを自動停止させたい


Spring によって起動する常駐プロセスに対して、一定時間が経過したらメインスレッドを停止する (== 常駐プロセスを `exit` させる)
タイマーを仕込むのはどうでしょう。

以下のコードを手元で試したところ動作しました。これを `~/.spring.rb` か `config/spring.rb` に書いておきます。
`sleep` のあたりは使いやすいように変更してみてください。

[code]

    Thread.new do
      sleep ENV.fetch('SPRING_AUTOSTOP', 1.day).to_i
      Thread.main.exit
    end
    
[/code]

(Rails 4.1.7 Spring 1.1.3)

参考: <https://github.com/rails/spring#running-code-before-forking>


CC BY-SA 3.0
2015-01-30T18:45:18.260
5641
2015-01-30T18:45:18.260
82
5616
answer