アインシュタインの電話番号
2011.02.18
Herokuでデータベースの接続情報を調べる

Herokuでデータベースの接続情報は、アプリ作成時にHeroku上の環境変数ENVに自動で追加されるが、これを消しちゃうと復元不可能になるっぽい。なので、アプリ作成時に情報を取得してバックアップしておくのは良いことかもしれない。

経緯

Herokuアプリを作って色々試している頃に、heroku config:clear1をしてしまって、DATABASE_URLSHARED_DATABASE_URLを消してしまった。最初のうちはアプリでデータベースを使っていなかったので何も問題なかったんだけど、いざデータベースを使おうと、ENV['DATABASE_URL'] なコードを含むアプリをpushしたら「接続情報がないから使えないっスよ」とHerokuさんに言われる始末。さぁどうしたもんか、とHerokuのDB接続情報を取得する方法をネットで探すも見つからない。

困ったなぁとTwitterでつぶやいたら、いくつかレスポンスをいただけた。結果は冒頭で書いたとおり、一度消してしまうと復元は難しいということだ。

まとめ

  • SHARED_DATABASE_URLが残っていれば、デフォルト状態ではDATABASE_URLと同じ情報がそこには書き込まれている
  • Herokuのサポートに聞けば答えてくれるかもしれない。ただし、もちろん英語
  • 支障がなければ、アプリを作り直してリネームするのが手っ取り早い(実際この方法を選んだ)
  • コンソールからYAMLのクラスメソッドを使えば値を参照できる。ただし、config:clearを発動した時点で消えてしまうので今回の場合は参照できない
  • Herokuはconfig/database.ymlを自動生成する

というわけで、今回自分は「アプリを作り直してリネームする」という方法を選んだ。GitHubにもアップロードしていたので、別フォルダにcloneして、heroku createで適当な名前をつけて、元アプリの名前を一旦別の名前にして、cloneの方を元の名前にする。

あとは、pushして、heroku config:addで必要な環境変数を追加して、heroku config:add TZ=Asia/Tokyoでタイムゾーンを日本時間にして、Herokuの管理画面からアドオンを追加した。結構簡単に複製出来ちゃう。


Herokuで稼働中のアプリのDB名を調べる方法 - 今日もスミマセン。


  1. deprecateになっているので将来的には使えなくなるはず