LoginSignup
135

More than 5 years have passed since last update.

pumaを使ってみた

Last updated at Posted at 2012-12-26

注:この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に

Gemfile
gem 'puma'

と書いて

bundle

でインストールできる。

起動

rails s Puma

でWEBrickの代わりのpumaがサーバーになる。標準では16スレッド立ち上がる。

設定ファイルによる起動

ドキュメントはまだない。公式でも実装を読んでほしいらしい。
(ただしdaemonの設定は、2.0.0よりサポートされる。)

puma.rbの設定例

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
を参考にしよう。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
135