LoginSignup
17
12

More than 5 years have passed since last update.

HerokuでRidgepoleを動かす(PostgreSQL)

Posted at

はじめに

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

17
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
12