Rails開発者なら知っておきたい!HerokuでMySQLを使用するためのセットアップとデプロイ方法

こんにちは、RailsエンジニアのYutaです。今回はRailsで本番環境にdeployする際によく使われるHerokuについて取り上げます。

僕自身リレーショナルデータベースシステムの中でMySQLが一番使い慣れているのですが、herokuで使用するときにはちょっとしたセッティングが必要で、調査・実装する中で今後のためにも記事にすることにしました。

「HerokuでMySQLを使いたい!」と考えている方のお役に立てれば幸いです。

開発環境

IDE

cloud9

言語

ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]

フレームワーク

Rails 5.0.6

ターミナルでherokuにログインし、アプリを作成する

$ heroku login
Enter your Heroku credentials:
Email: # herokuで登録したメールアドレス
Password: # herokuで登録したパスワード
Logged in as # 上記で入力したメールアドレスが表示される

$ heroku create
Creating app... done, ⬢ shrouded-ocean-96791
https://shrouded-ocean-96791.herokuapp.com/ | https://git.heroku.com/shrouded-ocean-96791.git

$ git push heroku master
:
:
:
:
remote: Verifying deploy... done.
To https://git.heroku.com/fierce-cove-74806.git
 * [new branch] master -> master
# 問題なくdeployできたら、上記のように表示される

Heroku用にMySQLの設定を行う

HerokuでMySQLを使用するためには、cleardbと呼ばれるアドオンを先ほど作成したアプリにインストールをする必要があります。

$ heroku addons:create cleardb:ignite
Creating cleardb:ignite on ⬢ fierce-cove-74806... free
Created cleardb-shallow-46148 as CLEARDB_DATABASE_URL
Use heroku addons:docs cleardb to view documentation

# 以下のコマンドを実行することで、デプロイ用のDB接続情報を確認することができます。

$ heroku config | grep CLEARDB_DATABASE_URL
CLEARDB_DATABASE_URL: mysql://ユーザー名:パスワード@サーバー名/データベース?reconnect=true

# ただし、Railsのgemでインストールしているのがmysql2である場合、以下のように書き換えないとmigrationが走らないので注意。

$ heroku config:set DATABASE_URL=mysql2://ユーザー名:パスワード@サーバー名/データベース?reconnect=true

Setting DATABASE_URL and restarting ⬢ fierce-cove-74806... done, v6
DATABASE_URL: mysql2://ユーザー名:パスワード@サーバー名/データベース?reconnect=true

STAGING環境など、masterと異なるブランチでherokuを動かしたい場合

herokuにRailsプロジェクトをpushする以下のコマンドは、Gitのmasterブランチにある情報をdeployします。

git push heroku master

例えば、

「masterブランチはAWSにdeployしたいけど、念のため本番環境の挙動をherokuでかつ別のブランチで確認したい。」

このように考えた時herokuへdeployするためには以下のコマンドを実行する必要があります。

git push heroku ブランチ名:master
例:git push heroku feature/staging:master

これで現在のブランチの情報をherokuへdeployすることができますよ。

本番環境でfacebook認証を稼働させる場合の注意点

dotenvなどで環境変数にsecret keyなどを読み込ませている場合、git ignoreなどでバージョン管理から除外しているとエラーが発生します。

そのため、一旦git ignoreから削除した上で、herokuへdeployしましょう。

また、画像の赤・青・黄色の枠にそれぞれ本番環境用のドメインを設定してください。

赤枠: fuga.herokuapp
青枠: https://fuga.herokuapp.com/
黄色枠: https://fuga.herokuapp.com/hoge/auth/facebook/callback

本番環境で実際にfacebookのログインボタンを押下して、問題なければ設定完了です。