Railsで
$ rails g model Hoge fuga:references $ rake db:migrate $ rm -rf db/migrate
みたいな感じでモデル新規作成時だけ一旦マイグレーションファイル作ってからRidgepoleのSchemafileにdumpして… みたいな運用してたら詰まった.
ActiveRecordのreferencesはadd_foreign_key "hoge", "fugas"
みたいな感じで名前を設定しないので,このままdumpするとSchemafileにも名前なしの外部キーが出力される.これをDBにapplyしようとすると
Apply `db/schemas/Schemafile` [ERROR] Foreign key name in `hoge` is undefined rake aborted! Command failed with status (1): [bundle exec ridgepole -Edevelopment -c con...] ...
みたいな感じでエラーを吐く.修正するには
db/schema.rb
のfkに名前を設定Schemafile
のfkに名前を設定$ rake db:reset
とか実行しておく
みたいなことすればよさそう.
ちゃんと名前を設定しようという話でした.
外部キー詳しくないまま使ってるのだけど,Ridgepoleで名前の設定を強制させる理由ってなんだろう.Rails側が無名で出力できるんだからわざわざraiseすることなくてwarnとかでとどめておけば良いのに.