Railsの開発環境を構築したんだけど, 既存アプリをCloneして動かすのにどうすればいいのかわからない... というときのメモ
development環境のデータベースにpostgresqlを用いているHeroku上のRailsアプリをローカルで動作させます.
事前準備
必要なToolのインストール
とりあえずMac環境でHomebrewを使った方法を残しておきます.
とにかくRails環境とpostgresql
, Heroku Toolblet
があればOK.
brew update
brew upgrade
brew install postgresql
brew install heroku-toolbelt
Herokuアカウント取得
ここからHerokuにサインイン
Collaboratorとして登録してもらう
アプリのownerに自分のHerokuアカウントをCollaboratorとして登録してもらいます.
登録されていないアプリはheroku git:clone
できません.
アプリ(例としてアプリ名をHOGE
とします)のOwnerにさきほど登録したメールアドレスを伝えて
heroku sharing:add hoge@example.com --app HOGE
としてもらいます.
アプリをclone & gemインストール
# 作業DIRへ移動
cd ~/huga
# まずはログイン
heroku auth:login
# clone
heroku git:clone --app HOGE
とすれば~/huga/HOGE/
にアプリの中身がやってきますので
cd ~/huga/HOGE
bundle install
としてCloneしたアプリが必要とするgemを入れます.
postgresqlの設定
データベース起動
# postgrsqlをバックグラウンドで起動
# ここでは~/.pgserver.logにログ出力させています
pg_ctl start -l ~/.pgserver.log
(終了する場合はpg_ctl stop -s -m fast
です)
データベース作成権限をもつユーザを登録
CloneしたアプリのDB設定に合わせてローカルのpostgresql環境を整えます.
設定はconfig/database.yml
のdevelopment:
以下に書かれています.
development:
adapter: postgresql
encoding: unicode
pool: 5
database: hogedb
username: hogeac
password: hogepass
host: localhost
のような記述になっているかと思います.
database.yml
にあるusernameをpostgresqlのユーザとして登録します.
ここで-d
オプションを付けてデータベースの作成権限を与えることが必要になります.
$ createuser -P -d hogeac
# ユーザ名が小文字のみで作成すると楽
# passwordとしてhogepassを入力
権限を確認するとき
psql -l
でデータベースの一覧を確認できます.
初期状態ではpostgres
, template0
, template1
といったデータベース名があるかと思います. どれでもいいので接続して(ここで例としてpostgres
に接続します)
psql postgres
# postgresqlのコンソールが起動します
# ユーザを確認します
postgres=# \du
Role name | Attributes | Member of |
---|---|---|
fesinfo | Create DB | {} |
となってればOKです. Create DB権限がないと, db:create
ができません.
コンソール終了は\q
です.
dbを作成
cd ~/huga/HOGE
rake db:create db:migrate
これで必要なdb(レコードなし)が構築されます.
全てのレコードをコピーする場合にはHerokuのデータベースをリストアすればよいかと思います.
動作確認
rails server
# 別の端末を立ち上げて
open http://localhost:3000
secret_tokenでエラーが出る場合
HOGE::Application.config.secret_token = ENV['SECRET_KEY_BASE'] || "sometoken"
みたいになっていたら, herokuの環境変数をsecret_tokenとして使っています.
このときは
export SECRET_KEY_BASE=`rake secret`
などで適切な環境変数を設定する必要があります.
##参考