Help us understand the problem. What is going on with this article?

Pumaの起動におけるpumaコマンドとpumactlコマンドの違い

More than 3 years have passed since last update.

背景

これまで開発していたRailsアプリケーションはアプリケーションサーバにUnicornを採用して本番稼働させていた。最近になってようやくRails5に移行しようかとなったので、ずっと気になっていたPumaを試験的に採用してみることにした。

開発したアプリーションをPumaで起動する際には、どうやら「pumaコマンド」で起動する方法と「pumactlコマンド」で起動する方法があるらしい、ということがわかったがいまいちその違いがわからなかったので調べてみた。

Pumaとは

Pumaではリクエストの並列処理を実現させるためにスレッドを利用している。リクエストを処理するためのスレッドをスレッドプールに事前に用意しておいて、リクエストがきたときにスレッドに処理を任せることでスレッドベースな処理を実現させているらしい。
GitHub - puma/puma: A ruby web server built for concurrency

Pumaの起動

Pumaを本番環境で起動する際、どうやら起動に使うコマンドは大きく分けて2つあるらしい、ということを知った。

1. pumaコマンドでの起動

$ bundle exec puma -t 5:5 -p 3000 -e production -C config/puma.rb -d

2. pumactlコマンドでの起動

$ bundle exec pumactl start

1は何をやっているかというと、Pumaを3000番ポートを指定してproductionモードで起動させている。ただし、最小スレッドは5、最大スレッドは5を指定している。設定ファイルはconfig/puma.rbにあるからそれを読んでね。あと、ちゃんとデーモンで実行してね。といったことをやっている。

対して2はpumactlコマンドを使って起動をおこなっている。どうやら、ポートを指定したり環境を指定したりはしないらしい。ただ、デフォルトで config/puma.rb を読みにいっているようで、記述した設定に沿って起動してくれるみたいだった。

つまり、$ bundle exec puma -C config/puma.rb$ bundle exec pumactl start は同義なのでは、というところまではすぐに理解できた。

あれ、pumactlコマンドってなんのためにあるんだろう...

pumaコマンドとpumactlコマンドの違い

このあたりちゃんと説明した日本語の情報がとても少なくて、リポジトリのREADMEを読んだり「what is deference between puma command and pumactl command」みたいなキーワードでがんばって調べたらRuby Journalになんかそれっぽいことが書いてあった。英語ができないととてもつらい。

As we can see that above operations can be tedious and error prone and definitely not fun to work with a big deployment scale. Introducing pumactl, this utility automates all of above tasks.
Digesting Pumactl

要するに、pumaコマンドで起動したりしてるといちいちオプション付けないといけないから大規模開発だとめっちゃつらいしやばいくらい闇だし、pumaコマンドでやってることはpumactlコマンドで自動化しような。ということを言っている。

なるほど、確かに。pumactlコマンドだと問答無用で設定ファイルが読まれるようになっているから、スレッドの数はどうするんだだの、ポート番号はどうするんだだの、ちゃんとコードで管理できる。

停止や再起動においてもpumactlコマンドで安全にできるらしい。

Available commands: halt, restart, phased-restart, start, stats, status, stop, reload-worker-directory

ということで

本番の商用環境で運用する際、Pumaの起動には極力「pumaコマンド」ではなく「pumactlコマンド」を使いましょうという感じだった。停止と再起動においても「pumactl」コマンドが用意されているのでそれをつかって安全に実行できますよ、とのこと。

ずっと気になっていたのですっきりしてよかったです。

himatani
Vue / TypeScript / Node.js / Python / Ruby / Swift / Firebase / AWS
https://himatani.me
yahoo-japan-corp
Yahoo! JAPAN を運営しています。
https://www.yahoo.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした