QA #844
奈良 裕記 さんがほぼ6年前に更新
h3. ■現象/要望
DB Migrationでカラム、インデックスを追加する場合、
既に作成されていると、二重作成によりmigrationが失敗する。
(Redmine本体では通常発生しないが、プラグイン等により発生する場合がある)
migration実行時に二重作成を回避したい。
h3. ■解決策
Migration実行時に存在チェックする事で、migration失敗を回避できる。
サンプル
(カラムが既に作成されている場合には追加しない。)
https://github.com/redmine/redmine/blob/master/db/migrate/20151031095005_add_projects_default_version_id.rb
<pre><code class="ruby">
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
</code></pre>
RAILSDOC抜粋
http://railsdoc.com/migration
カラムが存在するかチェック(column_exists?)
column_exists?(テーブル名, カラム名 [, 型, オプション])
インデックスが存在するかチェック(index_exists?)
index_exists?(テーブル名, カラム名 [, オプション])
テーブルが存在するかチェック(table_exists?)
h3. ■対応状況
migration中の条件分岐により対応可能
h3. ■補足
戻る