高木のブログ

Herokuで動かすRailsアプリのアプリケーションサーバーをPumaに変更する

2019/12/23

タイトル通り、Herokuで動いているRailsアプリのアプリケーションサーバーをPumaに変更した話。

経緯

そろそろHerokuにデプロイした時に出るWarningを一つ一つ潰していこうかなと思った時に最初に目をつけられたWarningがこちら。

remote: ###### WARNING:
remote:
remote:        No Procfile detected, using the default web server.
remote:        We recommend explicitly declaring how to boot your server process via a Procfile.
remote:        https://devcenter.heroku.com/articles/ruby-default-web-server

「Procfileが見つからなかったから、デフォルトのWebサーバーを使ったよ。Procfileでサーバープロセスを起動する方法を明示的に宣言することを勧めるよ。詳しくはこのURLを見てくれ。」
的なことが書かれてた。

「詳しくはこのURL」のサイト

Ruby Default Web Server | Heroku Dev Center

いろいろ読み進めていくと、 「デフォルトで使われるWebサーバーはWebrickだよ。開発用のサーバーを本番で使うのは相応しくないからPumaを使ってね」と。
デフォルトでPuma使ってると勝手に思い込んでた。ということでProcfileを作るついでにPumaに変更する。


手順

Deploying Rails Applications with the Puma Web Server | Heroku Dev Center
ここに書いてある指示に従って進めていく。

GemfileにPumaのgemを追加

# Gemfile

gem 'puma'

実際にはrails newの時点で入ってたみたいだったので追加していない。
開発で使わない場合はproductionのグループに移動してもいいかも。

config/puma.rbに設定を記述する

# config/puma.rb

workers Integer(ENV['WEB_CONCURRENCY'] || 2)
threads_count = Integer(ENV['RAILS_MAX_THREADS'] || 5)
threads threads_count, threads_count

preload_app!

rackup      DefaultRackup
port        ENV['PORT']     || 3000
environment ENV['RACK_ENV'] || 'development'

on_worker_boot do
  # Worker specific setup for Rails 4.1+
  # See: https://devcenter.heroku.com/articles/deploying-rails-applications-with-the-puma-web-server#on-worker-boot
  ActiveRecord::Base.establish_connection
end

書き方は少し違うが、ほぼ同じ設定内容が書かれてたが、Heroku公式の内容に書き換えた。

Procfileに設定を記述する

# Procfile

web: bundle exec puma -C config/puma.rb

こちらは新規ファイルを作成した。

commitしてデプロイ

git push heroku master

Pumaが使われているか確認

$ heroku ps
Free dyno hours quota remaining this month: 868h 15m (86%)
Free dyno usage for this app: 57h 59m (5%)
For more information on dyno sleeping and how to upgrade, see:
https://devcenter.heroku.com/articles/dyno-sleeping

=== web (Free): bundle exec puma -C config/puma.rb (1)
web.1: up 2019/12/19 23:46:30 +0900 (~ 18m ago)

問題なさそう。

以上!


Pixela