DBはRDSの、ECSで動いているRailsアプリで以下のようなことがありました。
質問内容としては、以下のようなことが起こった原因について、なにか少しでも見当がつく方がいれば、教えていただけると助かります。
起きてることの概要を先に書いておくと、
「migrateの内容はDBに反映されているのに、schema_migrationのversionは更新されない」という現象です。
以下が現象の詳細です。
前提
- migrationファイル1
- migrationファイル2
- migrationファイル3
の3つのmigrationファイルと、上記をmigrateしたschema.rbをデプロイした。
migrate→デプロイまでCIrcleCIで自動で行う。
起こったこと
- DBには、migrationファイル1の内容しか反映されてない。
- schema_migrationsのversionには、migrationファイル1〜3のバージョンが何も反映されていない
解決方法
- まずschema_migrationsのversionに、migrationファイル1のversionを手動で記述
- もう一度CI回す
- 今度はmigrationファイル2の内容がDBに反映されるが、schema_migrationのversionには、migrationファイル2のversionは反映されていない
- schema_migrationにmigrationファイル2のversionを手動で記述
- もう一度CI回す
- migrationファイル3の内容がDBに反映され、schema_migrationのversionにも、migrationファイル3のversionが「反映されている」
前提に上げたmigrationファイルの中身
migrationファイル1と2は、以下のようにadd_referencesするような内容です。
ruby
1class AddColumnToHoge < ActiveRecord::Migration[5.2] 2 def up 3 add_reference :hoge, :huga, null: false, foreign_key: true 4 end 5 6 def down 7 remove_reference :hoge, :huga, index: true, foreign_key: true 8 end 9end 10
migrationファイル3は、以下のようにカラムの内容を変更するような内容です。
ruby
1class ChangeColumnToHoge < ActiveRecord::Migration[5.2] 2 def up 3 change_column :hoge, :hogehoge_id, :integer, null: true 4 end 5 6 def down 7 change_column :hoge, :hogehoge_id, :integer, null: false 8 end 9end 10
あなたの回答
tips
プレビュー