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)
問題なさそう。
以上!