操作
QA #844
未完了DB Migrationの実行を条件分けしたい(migration失敗回避)
開始日:
2018/07/17
期日:
進捗率:
0%
予定工数:
説明
■現象/要望¶
DB Migrationでカラム、インデックスを追加する場合、
既に作成されていると、二重作成によりmigrationが失敗する。
(Redmine本体では通常発生しないが、プラグイン等により発生する場合がある)
migration実行時に二重作成を回避したい。
DBがMysql/Postgressの場合のみ実行
Rails のバージョンから判断して実行
■解決策¶
Migration実行時に存在チェックする事で、migration失敗を回避できる。
サンプル
(カラムが既に作成されている場合には追加しない。)
def self.up
# Don't try to add the column if redmine_default_version plugin was used
unless column_exists?(:projects, :default_version_id, :integer)
add_column :projects, :default_version_id, :integer, :default => nil
end
end
RAILSDOC抜粋
http://railsdoc.com/migration
カラムが存在するかチェック(column_exists?)
column_exists?(テーブル名, カラム名 [, 型, オプション])
インデックスが存在するかチェック(index_exists?)
index_exists?(テーブル名, カラム名 [, オプション])
テーブルが存在するかチェック(table_exists?)
DBがMysql/Postgressの場合のみ実行
if Redmine::Database.mysql?
if Redmine::Database.postgresql?
Rails のバージョンから判断して実行
if Rails::VERSION::MAJOR == 4
■対応状況¶
migration中の条件分岐により対応可能
■補足¶
操作