heroku + Ruby on Rails + MySQL なら JawsDB が便利な事を知っておこう
heroku + Ruby on Rails でも MySQL を使いたい
heroku は便利ですが
無料プランにこだわらないのであれば RDB には MySQL を使いたいですよね(偏見)
heroku で MySQL を扱う Add-on には現在 ClearDB と JawsDB があります。
が、ClearDB は MySQL 5.6 が default で MySQL 5.7 もサポートはしている、
という状態です。
- ClearDB MySQL | Heroku Dev Center
- "ClearDB provisions MySQL 5.6 by default on our new G5 infrastructure, but we also support MySQL 5.7."
- https://devcenter.heroku.com/articles/cleardb
MySQL 8.0 も 2018年4月リリースですから、リリースされて 3年で十分に知見も溜まってきています。
文字コードの問題などで今更 MySQL 5.x なんて使いたくない……
そんな人は、実質 JawsDB 一択となります。
- JawsDB MySQL | Heroku Dev Center
- "The current default database version is 8.0"
- https://devcenter.heroku.com/articles/jawsdb
似たような話をしている記事もありますね
- herokuでMySQL5.7以降を使うためにClearDBからJawsDBに変更する | Qiita
というわけで JawsDB を使っていきましょう。
JawsDB のこと
このあたりに目を通せば大体わかります。
- JawsDB MySQL | Add-ons | Heroku Elements
- JawsDB MySQL | Heroku Dev Center
- JawsDB Documentation
使い始めるとわかるんですが(少なくとも Shared ではない Whitetip プラン以上は)ただのAmazonRDSです。
各プランの詳細も上記ページに書いてありますが、チェックしておきたいことは1つで
Shared プラン(Multi-tenant) と Single-tenantプランがあるということです。
例えば、Shared プラン→ Single-tenantプラン へのアップグレードは
以下のように手動でバックアップ&復元を行う必要があったりするので抑えておきたいところです。
(Shared プラン間のプラン変更は自動作業で行えます)
heroku Webページ上から JawsDB Add-on を追加する
アドオンの追は heroku の Webページ上から簡単にできます。
Resources タブの Add-ons から検索して選択するだけです。
選択したらダイアログが開くので、planを選択して Submit Order Form です。
Add-on を追加すると、
JawsDB ダッシュボードへのリンクが表示されるようになります。
config/database.yml にを設定
heroku は RAILS_ENV=production
で動作するので config/database.yml の production のところをこんな感じに編集します。
<%= ENV['HOGE'] %>
の部分は heroku の環境変数、
つまり heroku config
の値と対応させるのでどんなキー名でもかまいません。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
...
production:
<<: *default
database: <%= ENV['MYSQL_DATABASE'] %>
url: <%= ENV['MYSQL_URL'] %>
username: <%= ENV['MYSQL_USERNAME'] %>
password: <%= ENV['MYSQL_PASSWORD'] %>
host: <%= ENV['MYSQL_HOST'] %>
default の方に、production で上書きしてない development 用の設定などが残っていると
うまく動かなかったりするので注意してください。
JawsDB のダッシュボードから heroku の環境変数を登録する
先ほど heroku のWebページから JawsDB Add-on を追加しましたが、
同じく heroku Web ページの Resources タブに
追加した Add-on である JawsDB が表示されていると思います。
その表示がリンクになっていて、そこから JawsDB のダッシュボードを開くことができます。
開いたダッシュボードには 追加した JawsDB の
- database
- url
- host
- username
- password
が表示されているので、
先ほど config/database.yml に記載した <%= ENV['HOGE'] %>
のキー値で
heroku の環境変数、つまり heroku config に登録していきます。
# heroku のリモートリポジトリを設定したローカルリポジトリのディレクトリ配下で実行
$ heroku config:set MYSQL_DATABASE=XXXXXXXXX
$ heroku config:set MYSQL_URL=XXXXXXXXX
$ heroku config:set MYSQL_USERNAME=XXXXXXXXX
$ heroku config:set MYSQL_PASSWORD=XXXXXXXXX
$ heroku config:set MYSQL_HOST=XXXXXXXXX
こんな感じですね。
注意点としては、以下にも記載があるように
今回の config/database.yml 例のように adapter として mysql2
を使用している場合は
url の値を mysql2://
から初めてやるように読み替える必要があります。
- JawsDB MySQL | Heroku Dev Center
- "If using the mysql2 gem, use the mysql2:// scheme instead:"
- https://devcenter.heroku.com/articles/jawsdb
環境変数の設定が終わったら、heroku に push しましょう。
設定に問題がなければ、 rails db:migrate
が通るはずです。
$ git push heroku main
$ heroku run rails db:migrate
簡単便利ですね!
このあたりの記事も参考にしました。
- 【Rails + MySQL】AWS→herokuの移行 | blog.aiandrox
- RailsアプリをHerokuにデプロイ(MySQL) | Qiita
- 【 Ruby on Rails 6.0 】heroku + Mysqlで本番環境にデプロイするよ | Qiita
今回はここまでです。じゃ!
Discussion
JawsDBのこと調べようとしてGoogle検索すると自分のこの記事ばっか引っかかって困る笑