Overview
ここに書くこと
- Dockerコンテナ上で動作するRailsアプリケーションに関する話です
- Railsアプリケーションをherokuにデプロイする話です
- dbはpostgreSQLを使います
Prerequisite
- 以下の開発環境が出来上がっている
- railsサーバー, dbサーバー用のdockerコンテナ(postgreSQL)のみ
- docker-composeでコンテナ同士が協調している
- ローカルでrailsアプリが正常動作している
-
rails s
+ ブラウザにてWebページの確認ができる
-
System
-
Docker
- ver:
19.03.5, build 633a0ea
- ver:
-
Docker-compose
- ver:
1.25.2, build 698e2846
- ver:
-
heroku CLI
- ver:
7.36.3 darwin-x64 node-v12.13.0
- ver:
Table of Contents
- Conclusion
-
-a
オプションが必要 - dbコンテナはherokuのアドオンを使う
- 参考にさせていただいたページ
Main
1. Conclusion
まず、結論です。以下の順にコマンドを打てば良いです。
docker-based-deployments-to-heroku(rails-app)
# webサービスイメージをherokuにpush
heroku container:push web -a myapp
# postgresql用add-onを作成する(大事)
heroku addons:create heroku-postgresql -a myapp
# webサービスコンテナをリリース(heroku上でコンテナを実行する?)
heroku container:release web -a myapp
# heroku上でdbのマイグレーション
heroku run rails db:migrate -a myapp
# デプロイしたWebページを開く
heroku open -a myapp
基本的には、参考にさせていただいたサイト通りなのですが、
いくつかそのままでは実行できない箇所があったので以下記述します。
2. -a
オプションが必要
おおよそ全てのコマンドにおいて、
デプロイ対象のインスタンス(herokuではdynoと呼ばれる)の名称を指定する必要があります。
名称は、herokuのマイページでも確認できますし、CLIでheroku apps
と入力しても確認できます。
ダメな例
heroku container:push web
と入力すると
エラーメッセージ
› Error: Missing required flag:
› -a, --app APP app to run command against
› See more help with --help
というエラーメッセージが出るので、-a
オプションで指定します。
良い例
heroku container:push web -a myapp
3. dbコンテナはherokuのアドオンを使う
herokuではvolumeが使えません。
したがって、PostgreSQLはherokuのアドオンを利用して、
webコンテナと接続させます。その設定が heroku addons:create heroku-postgresql -a myapp
です。
4. 参考にさせていただいたページ
本記事は必要最小限の内容しか記述していません。
以下に有用な情報があります。