我正在使用Ruby和葡萄。我创建了一个迁移文件来生成模型。当我运行迁移文件时,没有抛出任何错误,但未创建模型。所以我试着回滚。由于模型没有退出它再次抛出错误。
class CreatePaymentFortumoInstruments < ActiveRecord::Migration
def change
create_table(:payment_fortumo_instruments, id: false) do |t|
t.primary_key :id, :uuid
t.string :consumer_id, null: false
t.string :product_code, null: true, default: nil
t.string :partner, null: false
t.string :aasm_state, null: false
t.datetime :issued_at, null: true
t.datetime :activated_at, null: true
t.datetime :deactivated_at, null: true
t.timestamps
end
add_index :payment_fortumo_instruments, :id
add_index :payment_fortumo_instruments, :consumer_id
end
end
和回滚时抛出的错误
== 76 CreatePaymentFortumoInstruments: reverting
==============================
-- remove_index(:payment_fortumo_instruments,
{:column=>:consumer_id})
rake aborted!
StandardError: An error has occurred, this and all later migrations
canceled:
Index name ‘index_payment_fortumo_instruments_on_consumer_id’ on table
‘payment_fortumo_instruments’ does not exist
/opt/icflix/billing-v2/Rakefile:53:in `block (2 levels) in <top
(required)>'
ArgumentError: Index name
‘index_payment_fortumo_instruments_on_consumer_id’ on table
‘payment_fortumo_instruments’ does not exist
/opt/icflix/billing-v2/Rakefile:53:in `block (2 levels) in <top
(required)>'
Tasks: TOP => db:rollback
(See full trace by running task with --trace)
如何再次运行相同的迁移文件并创建模型。我不想为此创建新的迁移文件。
答案 0 :(得分:1)
如果您搞砸了迁移并且它是本地数据库,那么最简单的方法就是删除数据库并再次运行迁移。
如果您的最新迁移正确更新了架构,则可以运行rake db: reset
,这将重新创建数据库,然后从架构加载。
但可以肯定的是,我建议重新运行迁移:db:migrate:reset
,它将重新创建数据库,然后运行迁移。