10910


Ruby初心者です。

いくつかのWebアプリケーションフレームワークでは、サーバー起動後（boot時）や停止前（Ctrl+Cを押された場合など）にユーザーのカスタム処理を書くフックポイントが用意されていると思いますが、  
Ruby on Railsで同様のことがしたい場合のベストプラクティスはありますでしょうか？  
以下のサイトなどを見るとできそうではありますが、あまり正式な方法ではないように思います。  
<http://guides.rubyonrails.org/initialization.html>

複数サーバーでのスケールアウトが主流の世の中で、サーバーインスタンスの起動、停止にフックして処理すること自体、あまり必要性がないのかもしれませんが、参考までに質問です。


CC BY-SA 3.0
2015-06-02T07:22:22.297
10887
2015-06-03T02:49:29.957
9260
question
ruby-on-rails ruby
Ruby on Railsでサーバー起動後と停止前に処理を書く場合のベストプラクティスを教えてください。


コメントより

起動通知だけなら config/initializers配下でも良いと思いますが。  
残念ながらconfig/finalizersのようなものがありません。

ベストプラクティスというのは、なかなか難しいものですが。  
私の場合は、よくこういうrakeタスクを書きます。

[code]

    [lib/tasks/server.rake]
    namespace :server do
      desc '[auto-pilot] Server Start'
      task start: :environment do
        # ここにサーバー起動前処理
        ` ここに サーバー起動コマンド `
      end
      desc '[auto-pilot] Server Stop'
      task stop: :environment do
        # ここにサーバー終了前処理
        ` ここに サーバー終了コマンド `
      end
    end
    
    $ rake server start
    $ rake server stop
    
[/code]

一連のタスクの中でサーバー起動／終了だけ外部コマンド実行にする感じです。  
rakeタスク化するのであれば「サーバー起動前処理」など1つ1つをタスク化して、単独でも呼べるようにしつつ一連実行のタスクを提供するというのが正しい気がします(私はstart/stopだけでサボりますが)。


CC BY-SA 3.0
2015-06-02T15:54:47.323
10910
2015-06-02T15:54:47.323
8335
10887
answer


at_exitを利用すればfinalizerのようなものができると思います。

[code]

    config/initializers/任意のファイル.rb
    
    at_exit do
      puts '*** Stopped! ***'
    end
    
[/code]

[参考]  
- <https://stackoverflow.com/questions/5545000/how-to-launch-a-thread-at-the-start-of-a-rails-app-and-terminate-it-at-stop>  
- <https://stackoverflow.com/questions/1610573/shutdown-hook-for-rails>


CC BY-SA 3.0
2015-06-03T02:49:29.957
10927
2015-06-03T02:49:29.957
2017-05-23T12:38:55.307
-1
9608
10887
answer