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

Shunsuke Sawada

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

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

1
2
3
4
5
6
7
8
9
# config/database.yml 
production:
  adapter: postgresql
  encoding: utf8
  port: 5432
  pool: 25
  database: 123456789
  password: thisispassword
  username: thisisusername

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

1
2
3
4
5
6
7
8
9
10
11
# 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はデータベースを作成した時に、環境変数を自動で作成してるみたい。

1
heroku config

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

1
2
3
# === Config Vars
# DATABASE_URL: 
# HEROKU_POSTGRESQL_COLOR_URL: 

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

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

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

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

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

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

21
Shunsuke Sawada

おすすめの記事

Rails whereの検索で否定を使う
6
acts-as-taggable-on タグを表示させる順番を決めたい
Railsを4.2にバージョンアップしたら、Vagrantのローカル開発環境にアクセスできなくなった問題