RailsのサーバをPassengerにしてみた。
Apache上でRuby on Railsアプリケーションを動かす/Passenger(mod_rails for Apache)の利用 | Redmine.JP
↑のBlogに詳しく記載されてるのを参考にインストール。
いざ、Apacheを再起動すると403エラーが発生する…。
ApacheのVirtualHostの設定の中で、
これに合わせて、Capistranoのdeploy.rbも書き換えようと思ったら、PassengerってそもそもApacheのプロセスとして動作しているので、起動/停止をしようとすると、そもそもApacheの起動/停止になる。なのでPassengerの場合は起動/停止というよりは、再起動がメインになる。
再起動したい場合は、$RAILS_ROOT/tmp/直下にrestart.txtというファイルを配置するだけ。既に配置されている場合はtouchコマンド等でファイルのタイムスタンプを更新する。そのため、deploy.rbでも再起動タスクとして、
task :restart, :roles=>:app do run "touch #{current_path}/tmp/restart.txt" end
といったタスクを定義しておけばOK。
Passengerでは、アクセス状況によって自動的にRailsのインスタンスを起動/停止してくれ、各インスタンスのポート番号を気にすることも無くラクチンだけど、実際どういう稼動状況になるのか見えないと微妙だなーって思ってたら、
- passenger-memory-stats
Passengerが現在使用してるメモリの状況が確認できる。
- passenger-status
各インスタンスの状況が確認できる。
といったコマンドラインツールが付属してる。
passenger-statusを利用すると
----------- General information ----------- max = 6 count = 4 active = 0 inactive = 4 Waiting on global queue: 0 ----------- Domains ----------- /home/rails_app/current: PID: 8610 Sessions: 0 Processed: 2 Uptime: 2m 23s PID: 8616 Sessions: 0 Processed: 1 Uptime: 2m 23s PID: 8614 Sessions: 0 Processed: 1 Uptime: 2m 23s PID: 8600 Sessions: 0 Processed: 3 Uptime: 2m 33s
といったデータが取得できる。
General informationの値の意味は、
- max
Passengerが起動可能なアプリケーションインスタンスの最大値。 - count
現在、生きてるアプリケーションインスタンス数。 - active
現在、リクエストを処理しているアプリケーションインスタンス数。 - inactive
現在、アイドル状態にあるアプリケーションインスタンス数。しばらくすると停止する。(停止までの時間は、ApacheのVirtualHost内で行う設定値の1つであるPassengerPoolIdleTimeで指定可能。)
Domainsはアプリケーションインスタンスの各情報で、それぞれの意味は、
- Sessions
現在、このアプリケーションインスタンスの処理を待っているHTTPクライアントのキューの数。 - Processed
このアプリケーションインスタンスが今まで処理してきたリクエスト数。 - Uptime
このアプリケーションインスタンスが稼動している時間。
といった内容。
他にも、↓のように稼動状況を視覚化して監視する方法もあるみたい。