AというHerokuアプリからBというHerokuアプリのDBに接続する方法を残す
結論
Aの環境変数DATABASE_URLに、BのDBのURLを設定する。
設定方法
2つのHerokuアプリを作成する。
- DBだけのアプリ(DBアプリ)
- Railsアプリだけのアプリ(APアプリ)
DBアプリにAdd-onでHeroku Postgresを追加する。(デプロイしない)
APアプリにRailsをデプロイする。
デプロイすると、PostgresのAdd-onが追加されて、Config VarsにDATABASE_URLが追加される。
DATABASE_URLはAdd-onと結びついていると変更や削除ができない。
APアプリのHeroku Postgresを削除する。
Resources > Add-ons > Heroku Postgresの行の一番右をクリック > Delete Add-on
APアプリのDATABASE_URLを設定する
DBアプリ > Settings > Config Vars > Reveal Config Vars > DATABASE_URLをコピーして、APアプリのConfig VarsにDATABASE_URLを追加し貼り付ける。
$ rails db:migrate をするとDBアプリのdbのテーブル数が増えていることを確認できる。
この方法でDATABASE_URLを設定すると、Add-onに紐づいてない状態になるので、DATABASE_URLの変更や削除ができるので、要注意。
気づいた仕様
Resources > Add-on > Heroku Postgres の attachments から接続先のアプリを指定できる。
Manage Attachmentsをクリックすると、画面の右側からボックスが表示されるので、アプリ名で検索してクリックすると、APアプリとDBを紐づけることができる。
紐付けした瞬間に接続先のアプリの環境変数にURLが追加される
接続先のアプリにすでにDATABASE_URLが設定されている場合は、別の名前(HEROKU_POSTGRESQL_WHITEなど)で保存される。ただ、その状態では、Railsアプリ側で特別な設定をしない限り利用できない。その場合は、上述の設定方法にあるやり方で進めていき、DATABASE_URLの設定だけこちらの方法でやれば良い。
attachmentsを使った方法だと、DATABASE_URLがAdd-onと紐づいた状態になるため、Config Varsで変更したり削除できないから安全。
感想
いつ使うのか?と聞かれたら2つのアプリケーションでDBを共有するときとなると思う。
プランをアップグレードすると1Dynoで扱えるプロセス数が増えるので、2つのアプリケーションになっても不要かもしれない。こちらは試したことがないので、仮説。
もし上記の仮説が正しいとするなら、Free Dynoはプロセスが2つまでなので、FreeDynoで役に立つかもしれない。
ただFreeDynoは30分接続しないと自動でスリープするので、総合的に見ると実用的ではないかもしれない。まぁ30分に一回接続するようにバッチとか作れば回避できるので、なんとも言えないっちゃ言えないが。
コメントを残す