注:このTipsはRails初心者が書いたものです。ツッコミ歓迎です。
#pumaとは
http://puma.io/ で公開されているconcurrentなWebサーバー。thinやunicornはワーカー毎にプロセスを立ち上げるが、pumaはワーカー毎にスレッドを立ち上げる。production環境ではサイトのパフォーマンスを上げるため、複数のワーカーを立ち上げるが、thinやunicornはワーカー毎にプロセスが異なるため、排他処理ができない。しかし、pumaはスレッドで動作するため、Mutexでsynchronizeブロックを記述すれば、排他処理を行える。
RailsCast #365 Thread-Safetyで取り上げられていた。ここではpumaの設定等のメモをまとめる。
##インストール
pumaも他のgemと同様、Gemfileに
gem 'puma'
と書いて
bundle
でインストールできる。
##起動
rails s Puma
でWEBrickの代わりのpumaがサーバーになる。標準では16スレッド立ち上がる。
##設定ファイルによる起動
ドキュメントはまだない。公式でも実装を読んでほしいらしい。
(ただしdaemonの設定は、2.0.0よりサポートされる。)
###puma.rbの設定例
root = "/home/myapp"
bind 'unix:///tmp/puma.sock'
pidfile "#{root}/tmp/pid"
state_path "#{root}/tmp/state"
activate_control_app
activate_control_appは、pumactlというpumaをコントロールするコマンドを使いたい場合は有効にする。pumactlを使うにはactivate_control_app以外にもstate_pathを出力しなければならない。pumaを外部のプロセスから停止するには、
pumactl --state $STATEFILE stop
というように、state_pathで出力しておいたファイルを指定する。
##サービス化
Linux上でサービス化するには、jungle
を見る。複数のアプリもサポートできるみたい。start-stop-daemonを使ってdaemon化する。
複数のアプリを設定した場合、それぞれのアプリごとの環境変数はどういうように設定すればいいのだろう。
##Nginxとの連携
https://github.com/puma/puma/blob/master/docs/nginx.md
を参考にしよう。