Herokuで別AppのPostgreSQLを利用する
Heroku Advent Calendar 2014 - Qiitaの24日目でおます。
はじめに
Herokuで別のアプリから同じDBを使いたいことはないだろうか? 新機能リリースの本番直前に実データを使ったり、ハイパフォーマンスなDBを1台利用して費用を抑えたりなどあるだろう。
または普段はAWS等を利用して、ステージングにHerokuを利用する場合も同様に本記事が参考になることだろう。
HerokuでシンプルなRailsアプリを作る場合、基本的にそのアプリに付随したPostgreSQLを利用する仕組みになり、 database設定ファイルである,database.yml のproductionの項目は参照されない
ここで本記事では、別のHerokuアプリで利用しているPostgreSQLを、新たにHerokuで立ち上げたRailsアプリで利用する手順を記載する
利用したいDBの情報を確認する
Herokuでデータベースのデータを確認する、herokuにログインした状態で下記のURLにアクセスする https://postgres.heroku.com/databases
URLの項目は後で使うのでメモ、以下の様な値がある
postgres://xxxpasswdxxx:xxxusernamexxxr@ec2-xxxx-xxx-xxx--xxx.eu-west-1.compute.amazonaws.com
DBを利用するHeroku Appを新規作成する
# 新しAppを作成する > heroku create # アプリケーション名が手に入る > test-app-1234
追加するRailsアプリを用意する
ここではサンプルとして、Railsを新規作成する。(業務で行ったのは、既存のRailsアプリだが)
# Rails を新規作成 > rails new # git 管理させる > git init > git add -A > git commit -m "init"
git remote の設定をしてデプロイ出来るようにする
gitからherokuにデプロイするために、リモートリポジトリを追加する 特に、masterと別バージョンのリポジトリをデプロイしたい場合にはこれが必要
# リモートリポジトリの詳細を確認 > git remote -v # アプリの git urlを確認する #herokuのコンソール画面へ行ってsettings のタブの中にあるinfoの欄で確認する # git@heroku.com:test-app-1234.git # リモートリポジトリを追加する # <name>は任意の名前 > git remote add <name> git@heroku.com:test-app-1234.git ## 最後にリモートリポジトリの詳細を表示し、追加されていることを確認する > git remote -v
追加するRailsアプリをHerokuに追加する
# リポジトリがmasterの場合 > git push <name> # masterじゃないリポジトリを使いたい場合 > git push <name> <repo_name>:master -f
デプロイが完了すると、Herokuのアプリ上でDBの設定をしていないにもかかわらず、 Herokuからデフォルトで追加されたPostgresの無料版が追加される ※ Herokuの管理画面からも、heroku configコマンドからも確認ができる
HerokuのRailsアプリのDB設定を変更する
- まずはWebの管理画面から削除する
- 次に、herokuコマンドでDBの接続設定を定義する
# 環境変数を表示し、DATABASE_URLが”無いこと”を確認する > heroku config -a test-app-1234 heroku config -atest-app-1234 test-app-1234 Config Vars LANG: en_US.UTF-8 RACK_ENV: production RAILS_ENV: production # DATABASE_URL: を設定してやる # このとき設定するpostgres://〜〜の値は、上述の「利用したいDBの情報を確認する」で取得したもの > heroku config:set DATABASE_URL=postgres://xxxpasswdxxx:xxxusernamexxxr@ec2-xxxx-xxx-xxx--xxx.eu-west-1.compute.amazonaws.com -a test-app-1234 #アプリの再起動 > heroku restart -a test-app-1234
refs: http://stackoverflow.com/questions/5981508/share-database-between-2-apps-in-heroku