Pumaについて
bindle exec puma -d
指定する場合
bundle exec puma -C config/puma.rb
pumaはサーバのソケットを開いたままリスタートできます。要するに、ユーザーに対してサーバを開放したままサーバのリスタートができるということです。ユーザーを待たせることがないため、pumaを速くすることに貢献しています。
hot resrartと呼ばれるやつ
停止
kill -SIGUSR2 `(cat tmp/pids/server.pid)`
or
bundle exec pumactl restart
https://arma-search.jp/article/ruby-puma#i-2
ソケットとは?
pumaの設定
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i threads threads_count, threads_count port ENV.fetch("PORT") { 3000 } environment ENV.fetch("RAILS_ENV") { "development" } plugin :tmp_restart app_root = File.expand_path("../..", __FILE__) #{myapp_root}/tmp/sockets/puma.sock に bind している bind "unix://#{myapp_root}/tmp/sockets/puma.sock"
「environment」
pumaをどの環境で動作させるかを指定します。デフォルトは'development'になっています。
「daemonize」
rackサーバーをデーモンにして起動するかどうか
「pidfile」
pidファイルを配置するパスを指定します。 tmp/pids/puma.pidに配置するほうが良いと思います。
「state_path」 サーバー情報を記載したstateファイルを配置するパスを指定します。 stateファイルはpumactlコマンドでサーバーを操作するのに使用します。 railsの場合、特別このようなファイルを配置するディレクトリはないので今回はtmp/pids/以下に配置
「Cluster mode」
クラスタモードとは複数のワーカープロセスを起動し、そのプロセスそれぞれでスレッドプールを持ちリクエストを処理する仕組みです。 ワーカープロセスの数は以下のように指定します。 Workerの数をマシンが持つCore数を超えないように気をつけて下さい。
「Thread Pool」 Pumaはスレッドによってリクエストを処理します。スレッドをスレッドプールに貯めておく数の下限から上限を指定することが出来ます。
「bind」 サーバーをどのように接続するかをURIで指定。シンプルにTCPで接続する場合tcp://0.0.0.0:80、またWebサーバーの前段にnginxをなどを置き、そこからUNIX Socket経由で接続する場合はunix:///var/run/puma.sockのように指定します。
なんでNginxを使うのか、高速化と処理の負担を分散させる。
Nginx: 静的,画像を処理
↓↑UNIXドメインソケット(unix://の意味はこれか。)
Pumaは動的なファイルの処理に集中できる
スタートしてみた
# bundle exec puma Puma starting in single mode... * Puma version: 5.1.1 (ruby 2.6.6-p146) ("At Your Service") * Min threads: 5 * Max threads: 5 * Environment: development * PID: 36
ハンズオン
nginxとpumaの設定、連携が書かれていてわかりやすい。