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に置き換わっているはずです。
以上。
コメント