コンユウメモ @kon_yu

作ったガラクタとか、旅行とかの話

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