入れ替えた経緯
- herokuにデプロイしたWEBアプリのDBにcleardbで使用
- 一つのテーブルにtimestamp型のカラムが複数あり、それぞれデフォルト値をCURRENT_TIMESTAMPに設定し利用しようとすると、問題発生。
- cleardbのMySQLバージョンが5.5.6より低いため複数カラムにデフォルトCURRENT_TIMESTAMPが設定できない
- そのため、バージョンを指定できるjawsdbに入れ替えた。
手順
herokuにアプリが存在していることを確認。
heroku apps
heroku configでDB_NAMEを確認
heroku config
cleardbで作成したデータベースの削除
heroku addons:destroy cleardb --confirm あなたのアプリの名前
(ゴミ掃除として)cleardbの設定を削除
heroku config:unset DATABASE_URL
heroku config:unset CLEARDB_CRIMSON_URL
heroku config:unset CLEARDB_DATABASE_URL
jawsdbを作成
heroku addons:create jawsdb:kitefin -a fpl-official --version=8.0
追加された環境変数をmysql2用に書き換え。
# before (heroku config実行)
JAWSDB_URL: mysql://~
# コマンド
heroku config:set JAWSDB_URL="mysql2:~"
# after
JAWSDB_URL: mysql2://~
事後確認
# ~は伏せ字
% heroku config
=== あなたのアプリの名前 Config Vars
DB_HOSTNAME: ~
DB_NAME: ~
DB_PASSWORD: ~
DB_PORT: 3306
DB_USERNAME: ~
JAWSDB_URL: mysql2://~
LANG: en_US.UTF-8
RACK_ENV: production
RAILS_ENV: production
RAILS_LOG_TO_STDOUT: enabled
RAILS_SERVE_STATIC_FILES: enabled
SECRET_KEY_BASE: ~
ローカル環境でテスト環境にDB作成。ridgepoleを使用
bundle exec ridgepole -c config/database.yml -E test -f db/Schemafile --apply
ローカル環境でテスト環境に投入
bundle exec rails db:seed RAILS_ENV=test
herokuにDBデプロイ。ridgepoleを使用
heroku run 'bundle exec ridgepole -c config/database.yml -E production -f db/Schemafile --apply' --app あなたのアプリ名
seedファイルの内容を初期レコードとして投入
heroku run rake db:seed