herokuでアプリを構築する際に、herokuはデフォルトだとDBをpostgresqlを使用することになってしまいます。MySQLを使いたい場合、herokuのaddonにClearDBを追加して herokuのconfigのDATABASE_URLを書き換える必要があります。
その際に、DATABASE_URLがなぜか変更できない事象にハマったのでメモしておきます。
(前は普通に変更できたのになぁ…)
まずは設定の確認
$ heroku config CLEARDB_DATABASE_URL: mysql://b52366143f57c8:e8f53525@us-cdbr-iron-east-03.cleardb.net/heroku_0c42da1aed580d8?reconnect=true DATABASE_URL: postgres://zebafrrglyziec:1FNOnIbpN3tAfD2xkvW6hUldkl@ec2-54-83-12-22.compute-1.amazonaws.com:5432/dch5l0q66h0o4d LANG: en_US.UTF-8 RACK_ENV: production RAILS_ENV: production
現時点でDATABASE_URLはpostgresqlになっています。これをCLEARDB_DATABASE_URLの値に設定し直します。
※ “mysql:”の部分を”mysql2:”に変えることを忘れないで下さい。
$ heroku config:set DATABASE_URL='mysql2://b52366143f57c8:e8f53525@us-cdbr-iron-east-03.cleardb.net/heroku_0c42da1aed580d8?reconnect=true' Setting config vars and restarting hogehoge-app... !!! ▸ Cannot overwrite attachment values DATABASE_URL.
この時に上記のエラーが発生して変更を受け付けてくれない…
結論として、いったんDATABASEの設定を消さなければならないのですが、heroku-postgresqlをaddonに入れないといけないらしい
$ heroku addons:attach heroku-postgresql -a hogehoge-app Your version of git is 2.1.2. Which has serious security vulnerabilities. More information here: https://blog.heroku.com/archives/2014/12/23/update_your_git_clients_on_windows_and_os_x Attaching postgresql-deep-28339 to hogehoge-app... done Setting HEROKU_POSTGRESQL_PURPLE vars and restarting hogehoge-app ... done, v7
そして、DATABASEの設定を削除します。
$ heroku addons:detach DATABASE -a hogehoge-app Your version of git is 2.1.2. Which has serious security vulnerabilities. More information here: https://blog.heroku.com/archives/2014/12/23/update_your_git_clients_on_windows_and_os_x Removing DATABASE attachment to postgresql-deep-28339 from hogehoge-app... done Unsetting DATABASE vars and restarting hogehgoe-app... done, v8
そして設定したいDATABASE_URLを設定します
$ heroku config:set DATABASE_URL='mysql2://b52366143f57c8:e8f53525@us-cdbr-iron-east-03.cleardb.net/heroku_0c42da1aed580d8?reconnect=true' Setting config vars and restarting hogehoge-app... done DATABASE_URL: mysql2://b52366143f57c8:e8f53525@us-cdbr-iron-east-03.cleardb.net/heroku_0c42da1aed580d8?reconnect=true
これで設定変更完了
$ heroku config --app hogehoge-app CLEARDB_DATABASE_URL: mysql://b52366143f57c8:e8f53525@us-cdbr-iron-east-03.cleardb.net/heroku_0c42da1aed580d8?reconnect=true DATABASE_URL: mysql2://b52366143f57c8:e8f53525@us-cdbr-iron-east-03.cleardb.net/heroku_0c42da1aed580d8?reconnect=true HEROKU_POSTGRESQL_PURPLE_URL: postgres://zcbafrrglyziec:1FNOnIbpN3tAfD2xkvW6hUldkl@ec2-54-83-12-22.compute-1.amazonaws.com:5432/dch5l0q66h0o4d LANG: en_US.UTF-8 RACK_ENV: production RAILS_ENV: production
今思えば、heroku-postgresqlを入れれば普通に変更できたのかもしれない。
今度実験してみる
[ 2016/07/02 追記 ]
DATABASEの設定を削除した時に以下のエラーが発生した時がありました。
$ heroku addons:detach DATABASE -a hogehoge-app Detaching DATABASE to postgresql-solid-90854 from ⬢ hogehgoe-app ! ▸ Cannot destroy last attachment to billing app for resource postgresql-solid-90854
普通にheroku-postgresqlを削除したら普通にDATABASE_URLを設定できます。
途中で、アプリ名の入力を求められるので入力してあげると削除されます。
$ heroku addons:destroy heroku-postgresql --app hogehoge-app Your version of git is 2.1.2. Which has serious security vulnerabilities. More information here: https://blog.heroku.com/archives/2014/12/23/update_your_git_clients_on_windows_and_os_x ! WARNING: Destructive Action ! This command will affect the app: hogehoge-app ! To proceed, type "hogehoge-app" or re-run this command with --confirm hogehoge-app > hogehoge-app Destroying postgresql-solid-90854 on hogehoge-app... done, (free) Removing vars for DATABASE from hogehoge-app and restarting... done, v7
この後にDATABASE_URLの設定を行って下さい。