heroku / アプリから別のアプリのデータベースに接続する
ある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の情報があれば、上の書式に当てはめれば復元することができますよっと。
以上です。それではー。