読者です 読者をやめる 読者になる 読者になる

clock-up-blog

go-mi-tech

CakePHP2 マイグレーションを無理やり成功扱いにする

CakePHP PHP

使ってるプラグインはこれ。

マイグレーションを強制的に成功させる手段が見つからない

2015年2月現在。

$ ./Console/cake Migrations.migration run
…
---------------------------------------------------------------
There was an error during a migration. 
 The error was: 'Table "xxxxx" already exists in database.' 
 You must resolve the issue manually and try again.
All migrations have completed.

エラー起きたら起きっぱなしで、マイグレーションファイル修正するしかない。

善き昔

実は昔は強制成功扱いにするオプションがあった。

…
  Error: Table "xxxxx" already exists in database.
---------------------------------------------------------------
Do you want to mark the migration as successful?. [y]es or [a]bort. (y/a) 
> y

マイグレーションでエラーが発生しても、こんな感じに強制的に成功扱いにするかどうか確認するプロンプトが出ていたのだよ。

Migrationsプラグイン修正

ソース見た感じ、なんとなく不本意な問題っぽく見える。
MigrationVersion::run() の中で MigrationException を握りつぶされてしまっているので、外側に投げ直してあげれば、善き昔の挙動に戻ります。

Lib/MigrationVersion.php 341行目付近に2行追加。

  …
+ } catch (MigrationException $migrationException){
+     throw $migrationException;
  } catch (Exception $exception) {
  …

一応プルリク出しました

Fix prompt on failure by kobake · Pull Request #202 · CakeDC/migrations · GitHub

本当にこれで善いかどうかは作者が判断してくれるでしょう。

3月10日追記

本プルリクは本家 master にマージされました。

});