RailsのNO FILEのマイグレーションファイルが発生時の対応
アプリの起動に影響が無い場合は無視してもok
NO FILEの表示を削除する場合に有効な手順
マイグレーションファイルが作られたコミットを特定
code: (sh)
# NO FILEのバージョンの確認
rails db:migrate:status
# => up 20250331062253 ********** NO FILE **********
# 関連するコミットを洗い出す
git log --all --stat -- '**/{バージョン}*'
git log --all --stat -- '**/250331062253*'
=> 関連するコミット
--stat: 変更ファイルを表示
--all: 全てのブランチを対象(カレントブランチも含む)
--: オプションの終了
'**/{バージョン}*': git log で検索するパターン
文字列では無くパターン
シェルで展開されずGitコマンド側で展開される
https://dev.to/iamnan/fix-no-file-migrations-in-rails-7m6
ファイル名の特定
関連するコミットIDからファイル名を特定する
code: (sh)
# コミット詳細の確認
git show {変更されたコミットID}
# 例
git log --all --stat -- '**/20250331062253*'
commit dd812af19210ab076179ed132c42a8e5dda73915
...
db/migrate/20250331062253_add_action_completed_to_inquiries.rb | 1 +
1 file changed, 1 insertion(+)
NO FILEになっているマイグレーションファイルの作成
最新のコミット(一番上)のコミットID、マイグレーションファイル名で存在していたマイグレーションファイルの中身を確認
code: (sh)
git show {コミットID}:db/migrate/{マイグレーションファイル名}
# 例
git show dd812af19210ab076179ed132c42a8e5dda73915:db/migrate/20250331062253_add_action_completed_to_inquiries.rb
class AddActionCompletedToInquiries < ActiveRecord::Migration6.1
def change
add_column :inquiries, :action_completed, :boolean, default: false, null: false
add_index :inquiries, :action_completed
end
end
マイグレーションファイルを作成し、存在してたマイグレーションフィアルの中身を貼り付け
code: (sh)
touch db/migrate/20250331062253_add_action_completed_to_inquiries.rb
作成したマイグレーションファイルがDBに反映されているか確認
DBへの反映済みを想定しているが念の為確認
作成したマイグレーションファイルの内容がdb/schema.rbに記載されているか
マイグレーションファイルを作成したのでgit上は差分が発生している
code: (rb)
# db/migrate/20250331062253_add_action_completed_to_inquiries.rb
class AddActionCompletedToInquiries < ActiveRecord::Migration6.1
def change
add_column :inquiries, :action_completed, :boolean, default: false, null: false
add_index :inquiries, :action_completed
end
end
code: (rb)
# db/schema.rb
create_table "inquiries", force: :cascade do |t|
...
t.boolean "action_completed", default: false, null: false # 反映されている
t.index "action_completed", name: "index_inquiries_on_action_completed" # 反映されている
en
#Rails
#DB