【Rails7】本番環境(Heroku)のWebサーバーをPumaに置き換える

RailsにはデフォルトでWEBrickというWebサーバが付属しているのだが、

どうやらこのWEBrickというサーバーは本番環境(Heroku)での実行には適していないらしい。

そこで調べてみたら、本番環境ではPumaというWebサーバーが適しているらしい。

ということで、本番環境のWebサーバーを既存のWEBricからPumaに置き換えてみたので、その手順を書き残しておこうと思います。

(ちなみに、WebサーバーをPumaに置き換えてからアプリの動作が速くなった気がします)

目次

開発環境

  • Ruby 3.1.2
  • Ruby on Rails 7.0.3
  • M1 Macbook Air 2020
  • mac OS Monterey (ver. 12.4)
  • ターミナル bash (Rosetta 2 使用)

HerokuのWebサーバーをPumaに置き換えるための手順

本番環境(Heroku)のWebサーバーをPumaに置き換える手順については、Heroku公式サイトのマニュアルを参考に進めました。

Rails アプリケーションを Puma Web サーバーでデプロイする

Pumaをアプリケーションに追加する

まずはPumaをGemfileに追加します。

gem 'puma'

ただ、Rails バージョン7ではpumaがデフォルトで入っていました。(入っていたらこの作業は飛ばします)

Procfileの作成

アプリのルートディレクトリにProcfileを新規作成し、以下の1行を記述します。

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

Pumaの設定ファイル(puma.rb)の作成

Pumaの設定ファイルpuma.rbをconfigディレクトリ内に作成し、以下のように記述します。

(Rails7ではデフォルトで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のデータベースはpostgresqlなので、本番環境用のデータベース設定を行ないます。

まずは、Gemfileに以下の内容を記述します。

group :production do
  gem "pg"
end

追加したら、以下のコマンドを実行します。

$ bundle install --without production

続いて、データベースの設定ファイルdatabase.ymlの編集といきましょう。

production:以下に下記の内容を記述します。

production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5

これで一通りの設定は終わりです。

あとは、HerokuにデプロイすればWebサーバーはPumaに置き換わっているはずです。

以上。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

愛知の34歳。無職で暇になり始めたプログラミング(Ruby on Rails)の忘備録をまとめたブログです。最近は別にやりたいことができたのでプログラミングほぼやっていません。気が向いたらまた再開するかも。僕の日常はメインブログの方で更新しています。

コメント

コメントする

目次