我刚刚为我的ruby项目创建了一个新的迁移文件(例如003_foo3.rb)
我用续集3.48。
先在当地进行测试
$sequel -m ~/myproject/db/migration postgres://postgres@localhost/myproject_db Error: Sequel::DatabaseError: PG::Error: ERROR: relation "bank" already exists
'bank'表已经在第一个迁移文件(001_foo1.rb)
中我认为续集跟踪已经运行的迁移? 我错过了什么?
答案 0 :(得分:1)
我感觉到你的痛苦,因为我在这里得到了来自Sequel的类似错误信息。
Sequel在您的应用数据库中创建一个名为schema_info
的表,以跟踪您运行的迁移。
create_table(:schema_info) do
column :version, "int(11)", :default=>0, :null=>false
end
使用timestamps或integer versions。
您的错误消息可能是由于Sequel没有创建该表,或者是因为您从头开始重新创建了应用程序数据库,在这种情况下,架构版本已丢失,从而产生了错误消息。
根据你提供的信息,不可能说出究竟发生了什么。
我偶尔会遇到类似的错误,我会在迁移文件中注释掉所有迁移代码,运行迁移,然后再次取消注释代码。
如果您确定自己已经运行了某个迁移,则可以更改version
表中schema_info
字段的值。
假设您有以下迁移:
001_some_migration.rb
002_some_other_migration.rb
...并且您已经运行了001,并且出现“已存在”错误,然后您可以设置schema_info
。version
= 1并再次运行迁移。迁移#1不会被执行,但#2将直接执行。