業務でも使ってみて問題なさそうな感じなので v0.6.4 をリリースしました。
主な変更点は以下の通りです。
- Add
--use-external-script
option - Add
--mysql-use-alter
option - Add
--alter-extra
option - Add
--dump-with-default-fk-name
option - Support
t.index
- Remove migration_comments support
- Fix fk apply order
--use-external-script / --mysql-use-alter
以前の記事にも書きましたが、--use-external-script
は外部スクリプトで変更を実施するためのオプションです。
https://github.com/winebarrel/ridgepole#execute-sql-using-external-script
$ cat test.sh #!/bin/sh SQL="$1" CONFIG_JSON="$2" echo "$SQL" | mysql -u root my_db $ ridgepole -c config.yml --apply --external-script ./test.sh
変更を適用するときに、SQLを外部のスクリプトに渡すことができるようになります。
--mysql-use-alter
はそれに関連して、CREATE/DROP INDEXの代わりにALTER TABLEを使うようになるオプションです。
この方が外部スクリプトでのパースが楽なので…
業務では、CIで「実行時間長すぎ」と言われたクエリについては、自動的に「pt-oscでクエリを実行する」スクリプトを出力して、それを手動実行みたいなことをやっています。がんばればpt-oscで勝手に適用、とかまでできると思いますが、そこまでやったことはないです。
--alter-extra
--alter-extra
はMySQLのALRER文にLOCK=NONEとかつけるためのオプションです。
https://github.com/winebarrel/ridgepole#add-extra-statement-to-alter
$ ridgepole -a -c database.yml --alter-extra="LOCK=NONE" --debug Apply `Schemafile` ... -- add_column("dept_manager", "to_date2", :date, {:null=>false, :after=>"from_date"}) (42.2ms) ALTER TABLE `dept_manager` ADD `to_date2` date NOT NULL AFTER `from_date`,LOCK=NONE -> 0.0428s -- remove_column("dept_manager", "to_date") (46.9ms) ALTER TABLE `dept_manager` DROP `to_date`,LOCK=NONE -> 0.0471s
--dump-with-default-fk-name / fk apply order
外部キーに関して二点ほど。
Railsでadd_foreign_keyを実行したとき、名前をつけないと自動的にfk_rails_e74ce85cbc
みたいな名前がつけられるんですよね。
ただ、この名前だと、スキーマをダンプしたときにname: が出力されない…
ridgepole的には外部キーに名前ついていないと困るので、--dump-with-default-fk-name
オプションで強制的にダンプできるようにしました。
あと、外部キーに関してはテーブルの作成順を考慮しないとエラーになる問題があったのですが、どういう定義順であっても、まずテーブルの作成を行ってから、外部キーを張るように修正しました。
Support t.index
/ Remove alias_method_chain
プルリクをいただきまして、
- Remove `Module#alias_method_chain` method by ykzts · Pull Request #65 · winebarrel/ridgepole · GitHub
- Support `t.index` by ykzts · Pull Request #64 · winebarrel/ridgepole · GitHub
t.index
がサポートされて、alias_method_chainが削除されました。
Rails5対応への足がかりができて、ありがたいことです。
また、それに付随して、migration_commentsのサポートを切りました。 migration_commentsについては対応状況が微妙だったのと、prependとalias_method_chainが同居する状況は避けたかったので、外した感じです。 今後も追加はないかなぁ…
次バージョンついて
とりあえず、以下を進めていきたいなぁ…と考えています。