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が実行されるようになっているのでこの作業が必要かどうかは怪しい。