はじめに
RidgepoleをHerokuとPostgreSQLで動かすサンプルを作ってみました。
githubのソースはこちら
https://github.com/yoshioota/ridgepole-sample
Ridgepole移行への流れ
既存のDBからSchemafileを作成する
# database.yml の development情報を元にして db/Schemafile を作成する
$ bundle exec ridgepole -c config/database.yml -E development --export -o db/Schemafile
これは通常一回やればOK。これ以降はdb/Schemafileを変更し開発を進めていく。
定常開発
db/Schemafile にテーブル(カラム)の変更を記載する
# db/Schemafile
# articlesテーブルを追加
create_table "articles", force: :cascade do |t|
t.string "title"
t.text "text"
t.datetime "created_at"
t.datetime "updated_at"
end
Schemafileの情報をDBに適用する
実際の適用の前に --dry-run にて確認
bundle exec ridgepole -c config/database.yml -E development -f db/Schemafile --apply --dry-run
LGTMならDBに適用する
bundle exec ridgepole -c config/database.yml -E development -f db/Schemafile --apply
TESTの兼ね合いもあるので、schema.rbを作成する。
# schema.rbを作る
rake db:schema:dump
※ ちなみに直接test用DBを作成する場合はこちら(testの時はschema.rbから読む設定になってるからいらないかな)
# test用のDBに直接適用
bundle exec ridgepole -c config/database.yml -E test -f db/Schemafile --apply
HerokuのDBに適用する
Herokuへdeploy後以下のコマンドでHerokuのpostgreSQLに設定を適用する。
heroku run 'bundle exec ridgepole -c config/database.for.heroku.ridgepole.yml -E production -f db/Schemafile --apply' --app YOUR_HEROKU_APP_NAME
※ちなみに今回のサンプルではこんな感じでHerokuのENV['DATABASE_URL']を取得できるようにしてあります。楽。
# https://github.com/yoshioota/ridgepole-sample/blob/master/config/database.for.heroku.ridgepole.yml
production:
url: <%= ENV['DATABASE_URL'] %>
その他
■ PostgreSQLの外部キーをつけてるDBはうまく読み込めないので外しておく
どうもfkのnameが取ってこれないようなエラーが出てる。
まとめ
なんとかやっていけそう。
参考URL