herokuにローカル環境から直接デプロイ(Rails + Docker)

使用したリポジトリ

GitHub - ysirman/deploy-rails-to-heroku: Railsアプリをherokuにデプロイする練習

herokuへのデプロイ手順

参考
Container Registry & Runtime (Docker Deploys) | Heroku Dev Center
Rails on DockerをHerokuでDeployするまで - Qiita
How to Containerize and Deploy Apps With Docker and Heroku | by Chris I. | Better Programming | Medium

# mac でheroku CLIインストール
brew tap heroku/brew && brew install heroku

# ログイン
heroku login

# Container Registryにログイン
heroku container:login

# 好きなアプリ名でアプリ作成
heroku create [アプリ名]

# 現在のディレクトリのDockerfileを元にimage作成。Container RegistryへPush。
heroku container:push web

# 無料で使えるpostgresqlを追加
heroku addons:create heroku-postgresql:hobby-dev

# リリース
heroku container:release web

# アプリ削除
heroku apps:destroy --app アプリ名

# 環境変数の追加
heroku config:add RAILS_ENV=production

Railsコマンドでの作業
heroku run ****としてコマンドを実行できる。

# DB関連(DBはaddon追加時に作成されている)
heroku run rails db:migrate
heroku run rails db:seed

# 静的ファイルの準備
heroku run rails assets:precompile

最後の確認

# ブラウザでアプリを開く
heroku open

補足情報

現在のディレクトリにあるDockerfileでビルドされる。

heroku container:push web
=== Building web (/****/work/deploy-test/Dockerfile)
Sending build context to Docker daemon  91.55MB
Step 1/11 : FROM ruby:2.7.1
以下省略

他のプロセスタイプを利用したければ、Dockerfile.workerとしてプロセスタイプ名を指定

Container Registry & Runtime (Docker Deploys) | Heroku Dev Center

heroku container:push worker

DBの作成・削除はできないらしい

ruby on rails - Postgres db not working on Heroku - Stack Overflow

You cannot create a database on Heroku using db:create (you cannot drop it neither). Your database is created when you add an add-on (such as Heroku Postgres). You can only migrate and seed. And if you want to start over, you can use pg:reset (instead of drop and create)

遭遇したエラー

エラーログ確認方法

heroku logs --tail

アプリが起動しない1

heroku[router]: at=error code=H10 desc="App crashed"

Rails関連のログも出ていない場合、コマンドが間違ってるかも。

f:id:ysirman:20200902225736p:plain
ここのコマンドが

web irb

とかになってると、Rails が起動しないので注意。
Dockerfileに実行するコマンドを明記すること。
(私の場合は、docker-compose.ymlcommandに記述して安心してたら忘れました、、)

Rails ならDockerfileに、このコマンドが必要↓

# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]

アプリが起動しない2

heroku[router]: at=error code=H14 desc="No web processes running"

dynoが無いらしいので下記コマンドを実行 Heroku Error Codes | Heroku Dev Center

heroku ps:scale web=1

その他、必要そうな情報

Heroku操作 CLI - Qiita

【herokuコマンド】createからdestroyまで - Qiita