Rails5+MySQL+DockerをHerokuにデプロイする方法について簡単にまとめておく。
環境
- macOS Catalina 10.15.4
- Ruby 2.5.3
- Rails 5.2.4
- MySQL 5.7
- Heroku 7.39.1
- Git 2.24.1
前提
- Rails5 + MySQLのDocker環境を作成し、ブラウザ上でlocalhost:3000にアクセスしてサーバーの起動を確認していること
- Herokuにクレジットカード登録をしていて、MySQLをHerokuで使えるようになっていること
Herokuへのデプロイ手順
$ touch heroku.yml
アプリフォルダの直下にheroku.ymlファイルを作成。Gemfileやgitignoreなどと同じ階層。heroku.ymlは使っているテキストエディタで作成してもいいし、ターミナルから作成してもOK。touchコマンドはファイルを作成する時に使うコマンド。
build:
docker:
web: Dockerfile
run:
web: bundle exec puma -C config/puma.rb
作成したheroku.ymlには上記内容を記述。ファイルの内容はDockerfileに記述した内容にしたがってコンテナをHerokuにUpしてくださいね、そしてpumaも動かしてくださいね、という感じ
$ heroku login
作成したheroku.ymlには下記内容を記述。途中でエンターキーを押すとブラウザが立ち上がる。ブラウザ操作でログインが終わると、ターミナルの方もログインできる。
$ heroku create
作成したheroku.ymlには下記内容を記述。ちなみに$ heroku create 好きな名前 でその好きな名前がアプリ名のURLに使える。
$ heroku addons:add cleardb:ignite --version=5.7
HerokuではPostgresQLが基本的に無料で使えるが、Herokuにクレジットカード登録されているとMySQLも使用できる。上記コマンドを入力。
Herokuの追加オプションであるcleardbというMySQL用を使えるようにするアドオンを入れてくださいね、igniteという無料のやつ。そしてMySQLのバージョンは5.7でお願いしますという感じ。
Heroku側の設定だとMySQL5.6が最初は設定されている。アプリで使っているバージョンを合わせないと接続エラーが起きることがあるので、バージョンは開発環境とデプロイする環境で合わせたほうがいい。
$ heroku config:set DATABASE_URL=`heroku config:get CLEARDB_DATABASE_URL | sed -- s/mysql/mysql2/`
この辺りの設定はHeroku公式ホームページに記載されているとおりに進めている。気になる方は公式ホームページ要参照。
$ heroku stack:set container
Herokuにはコンテナをデプロイする方法がいくつかあるがHeroku.ymlを使ってデプロイするには上記コマンドが必要。これもHerokuの公式ホームページに乗っているので要確認。
$ git init
$ git add -A
$ git commit -m "コミットメッセージ"
$ git push heroku master
$ heroku open