利用され具合がいまいちよく分からないのですが、Ridgepole 0.4.10をリリースしました。
https://github.com/winebarrel/ridgepole
変更点
- テーブルのリネーム時にdry-runをするとこける不具合を直しました
以上です。
Fixの副作用として、dry-run時にshow/selectほげほげが失敗してもエラーが上がらないという問題が発生する可能性があるのですが「リネームこける方が問題かなー」「dry-runに厳密なエラーチェックを期待してもなー」と思ったので、この対応を入れました。 ご意見ありましたらIssueをば(日本語OKです!)
それから、修正はしていないのですが罠になりそうな事例がいくつかあったのでメモしておきます。
PKの変更
PKをbigintにしたいという事例があって、以下のようなDSLがプルリクとしてきたのですが期待通りには動かなかったです。
create_table "items", id: false, force: true do |t| t.integer "id", limit:8, primary_key: true
mysql2 adapter限定の話なのか分からないのですが、primary_key: true
だとPKにならないようです。
試行錯誤した結果をqiitaに書きました。
ActiveRecord 4.1+MySQLで任意のカラムをPKにする
ちなみにPKを任意の型にしている場合、Scemafileは以下のようになりますが
create_table "items", primary_key: 'my_id', id: 'bigint primary key', force: true do |t| ... end
これをRidgepoleでapplyすると[WARNING] Table
itemsoptions cannot be changed
という警告が出ます。
これはダンプ時に型の情報が失われScemafileの定義と差異が出てくるためです。
WARNING出さなくするのはできるのですが、実害ないし他の差異でWARNING出なくなっても困るかな…と思ってそのままにしてます。
あと、デフォルトのPKが作成済みの状態で
create_table "items", primary_key: 'my_id', id: 'bigint primary key', force: true do |t|
とか
create_table "items", id: false, force: true do |t| t.integer 'id', primary_key: true
とかやっても現状のPKを変更するALTER文は実行されません。
今のところ、カラムの定義はcreate_table
のブロック内の情報から取得しているので…
たぶん、すごーくがんばって「:idがfalseならあれしてこうして…」とかやれば差分を抽出できそうですが、必要な場面は多くないかなーと思っているので、もっと賢くする予定はいまのとこないです。
signedでbigintのカラムを作成できない
activerecord-mysql-unsignedのバグでsignedなintegerでlimit:8を指定してもbigintにならないという事例がありました。 プルリクは投げてますがいつマージされるかはよく分からないです。
とりあえず某社では、forkしたバージョンを使おうかと思ってます。
その他
どんだけいるかよく分からないですが、「業務で使ってて今すぐFixが必要なんだよ。コミット権よこせ」という方がいましたらば、すぐに対応いたしますのでご連絡いただければと。