Rails
MySQL
Heroku
デプロイ
DATABASE_URL

HerokuでMySQLを使うときはDATABASE_URLを書き換える

More than 1 year has passed since last update.

環境

  • OS X El Capitan 10.11.16
  • ruby 2.3.0
  • rails 4.2.5.2

前提

無料枠内でのHerokuの準備とデプロイ(Mac 10 + Rails 4.2 + MySQL 5.6)を参考に
HerokuでMySQLを使うための設定をしていたところ
heroku run rake db:migrateを実行したところで以下のようなエラー発生

$ heroku run rake db:migrate
Running rake db:migrate on ⬢ <アプリ名>... up, run.2205 (Free)
rake aborted!
Gem::LoadError: Specified 'postgresql' for database adapter, but the gem is not loaded. Add `gem 'pg'` to your Gemfile (and ensure its version is at the minimum required by ActiveRecord)
...

問題と原因

HerokuのaddonでMySQLを追加したはずだが、うまく接続できていなさそう
database adapterがpostgresqlに設定されたままなのが原因か

解決策

そこでHerokuでMySQLを使おうとして詰まったところ - Qiitaを参考に解決を試みたところ、どうやら

1. CLEARDB_DATABASE_URLのmysqlmysql2に書き換えて、
2. DATABASE_URLもpostgresじゃなくてmysql2のURLに変える
必要がありそう

$ heroku config
=== flagmap Config Vars
CLEARDB_DATABASE_URL: mysql://~~~~~ #1の方
DATABASE_URL: postgres://~~~~~ #2の方
#..

以下のようにして1の方は書き換えられた

$ heroku config:set CLEARDB_DATABASE_URL='mysql2://~~~~~'

しかし2の方が上手くいかない、、

$ heroku config:set DATABASE_URL='mysql2://~~~~~'
Setting DATABASE_URL and restarting ⬢ <アプリ名>... !
 ▸    Cannot overwrite attachment values DATABASE_URL.
$ heroku addons:detach DATABASE -a <アプリ名>
Detaching DATABASE to postgresql-cylindrical-92240 from ⬢ mysterious-peak-72912... !
 ▸    Cannot destroy last attachment to billing app for resource postgresql-cylindrical-92240

ググりまくった末、mysql - Heroku and ClearDB error - Stack Overflowで解決できた
addons:detachではなくaddons:destroyでやったら上手くいった

$ heroku addons:destroy heroku-postgresql -a <アプリ名>
 ▸    WARNING: Destructive Action
 ▸    This command will affect the app <アプリ名>
 ▸    To proceed, type flagmap or re-run this command with --confirm
 ▸    <アプリ名>

> <アプリ名>
Destroying postgresql-cylindrical-92240 on ⬢ <アプリ名>... done

最後に再び以下のコマンドで書き換え成功!

heroku config:set DATABASE_URL='mysql2://~~~~~'

herokuの設定を確認すると

$ heroku config
=== flagmap Config Vars
CLEARDB_DATABASE_URL: mysql2://~~~~~
DATABASE_URL: mysql2://~~~~~
...

無事変更できてます

$ heroku run rake db:migrate

これでデプロイ成功しました!

参考にしたサイト