heroku / アプリから別のアプリのデータベースに接続する

あるherokuアプリから、別のアプリのデータベースに接続するにはどうしたらいいのか疑問に思ったので実験してみた。普通に config/database.yml を編集するだけじゃうまくいかなかったよ。

こんなデータベースがあったとします。
アプリAのDB

# config/database.yml 
production:
  adapter: postgresql
  encoding: utf8
  port: 5432
  pool: 25
  database: 123456789
  password: thisispassword
  username: thisisusername

 
で、別のアプリの設定をこんな風にしてみた。
アプリBのDB

# config/database.yml 
production:
    #アプリAのDBのHostname
  host: ec2-11-111-111-111.eu-west-1.compute.amazonaws.com
  adapter: postgresql
  encoding: utf8
  port: 5432
  pool: 25
  database: 123456789
  password: thisispassword
  username: thisisusername

通常はhostを書かなくてもいいんだけど、別アプリだからhostはいるよね、ということで書いたんだけど、これだけではうまくいかなかった。
 

環境変数

どうやら、herokuはデータベースを作成した時に、環境変数を自動で作成してるみたい。

heroku config

を叩くとわかりますが、下のような変数が設定されています。

# === Config Vars
# DATABASE_URL: 
# HEROKU_POSTGRESQL_COLOR_URL: 

HEROKU_POSTGRESQL_COLOR_URLのほうは「アプリB」のデータベースで、DATABASE_URLがこのデータベースを使いますよ、ということみたい。

で、DATABASE_URLは以下のような書式で指定できる。
(Postgreslを使っている場合)

postgres://[username]:[password]@[host]:[port]/[database]

これをherokuの環境変数にセットしてあげれば、接続することができました。

heroku config:add DATABASE_URL=postgres://…………

まちがってconfig消しちゃったって場合も、DBの情報があれば、上の書式に当てはめれば復元することができますよっと。
以上です。それではー。

何かありましたらコメントをどうぞ

comments powered by Disqus

人気の記事

950 Points チリ出身のギタリストが弾くドラゴンボールZがむちゃくちゃかっこいい…
774 Points Wordpress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 無料でサイト運営
700 Points Rubyのチートシート 変数 / クラス / モジュール
524 Points Rubyのチートシート / アクティブサポート
451 Points 紙のデザイナーがウェブ開発できるようになるまでに必要なこと
435 Points Rails / Google Analyticsのデータを使って分析や管理画面のためのグラフをつくる
323 Points RailsとHerokuでノーティフィケーションをプッシュする / PusherとTurbolinksの兼ね合い
222 Points Rails / RSpec テスト書いたことない メンドクサイ(n´Д`)という時のチートシート
193 Points Rails / Ajaxを使って画面遷移しない一時保存機能をつける
193 Points Protractorでスクレイピングしてみた