Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

pumaでコントロールサーバを使うときはトークンをつけた方が良いよ

More than 5 years have passed since last update.

Rubyのウェブアプリケーションサーバにpumaというのがあります。

で、そのpumaにはコントロールサーバという仕組みがあります。その仕組みを使うと、指定したURLにHTTPリクエストを送るだけでpumaの再起動や停止が行えます。使い方は下記の通り。

$ puma -S tmp/puma.state --control unix://tmp/pumactl.sock & # 起動
$ pumactl -S tmp/puma.state restart # 再起動
$ pumactl -S tmp/puma.state stop # 停止

で、結論から言うと、まあタイトル通りなのですが、コントロールサーバを使うときは、上記だけでは少しおっかなく、トークン(--control-tokenオプション)も使った方が良いよ、ということです。何故か。下記のケースで少し面倒なことになります。

$ puma -S tmp/puma.state --control unix://tmp/pumactl.sock &
$ grep token tmp/puma.state
    :control_auth_token: 87475081db4cf2d91e949f846fbcf69
$ puma -S tmp/puma.state --control unix://tmp/pumactl.sock & # ミスでもう一度起動してしまった
/home/takkkun/example/vendor/bundle/ruby/1.9.1/gems/puma-1.6.3/lib/puma/server.rb:117:in `initialize': Address already in use - bind(2) (Errno::EADDRINUSE)
...
$ grep token tmp/puma.state
    :control_auth_token: d327cd9e14391fcee9a9ddc9f749af1
$ pumactl -S tmp/puma.state stop
Unauthorized access to server (wrong auth token)

とまあ起動が失敗したにも関わらず、pumaサーバの状態を保持する.stateファイル(中身はただのYAML)に記載されたトークンの値が上書きされてしまい、pumactlのときにトークンが違うよと言われてしまいます。

--control-tokenオプションでトークンを指定しない場合、トークンはランダムで生成されたものが使われます。ランダムになってしまうのがイヤなので、トークンは自身で設定した方が良いよ、というお話でした。

welmo
介護福祉の課題をテクノロジーで解決するサービスの開発と、子どもの可能性を解放する障がい児支援施設を運営しています。
https://welmo.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