技術ブログ

(技術系中心)基本自分用備忘録なので、あくまで参考程度でお願いします。

Docker環境のRails7をherokuにデプロイした時にハマった現象まとめ

Docker環境のRails7をherokuにデプロイした時にハマった現象まとめ

1. Heroku Stackの設定

Docker コンテナを Heroku で使用する為にheroku stack:set containerコマンドを叩く必要があります。

このコマンドを叩くことで、Heroku が Dockerfile を使用してアプリケーションのビルドとデプロイを行うよう指示するようになります。

2. heroku.ymlの設定

HerokuでDockerコンテナを使用する場合、heroku.ymlファイルを作成します。

例)

build:
  docker:
    web: Dockerfile
run:
  web: bundle exec puma -C config/puma.rb

3. 環境変数の設定

3.1 DATABASE_URL

Herokuでは、アプリケーションにアタッチされたデータベースアドオンの情報は自動的にDATABASE_URLに保存されます。

Ruby on Railsの場合、database.ymlファイルでデータベースの設定を行いますが、production環境の設定では以下のようにDATABASE_URL環境変数を設定する必要があります。

production:
  <<: *default
  database: aaaaa_production
  username: aaaaa
  password: <%= ENV["MYAPP_DATABASE_PASSWORD"] %>
  url: <%= ENV['DATABASE_URL'] %

3.2 PORT

Heroku環境では、アプリケーションがリッスンすべきポート番号が PORT 環境変数によって提供されます。そのため、RailsアプリケーションがHerokuで正しく動作するためには、この PORT 環境変数を適切に使用する必要があります。

例えば、Pumaサーバーを使用している場合、config/puma.rb ファイルで以下のように設定する必要があります。

// ローカル環境など、PORT 環境変数が設定されていない環境でもアプリケーションが動作するようにするため、|| 3000 の部分が必要
port ENV['PORT'] || 3000

3.3 SECRET_KEY_BASE

SECRET_KEY_BASEは、RailsアプリケーションがセッションやCookieを暗号化するために使用する秘密鍵です。

config/credentials.yml.enc ファイルにある secret_key_base の設定を確認し、herokuの'production'環境用のシークレットキーを追加する必要があります。

4. ローカルでassets:precompileしてからデプロイする

herokuにCSSが反映しないので、 ローカルでassets:precompileしてからデプロイした。

ただし、この記事をみる限り、Herokuではデプロイ時に自動的にassets:precompileが実行されるようになっているのでこの作業が必要かどうかは怪しい。