我有一些需要运行的迁移。但是当我rake db:migrate
发生以下错误时。
Mysql2::Error: Table already exists
。
由于表已经存在,但这种情况发生了4-5次,但schema_migrations
表似乎与应用程序不同步。
我的数据库中有一个生产转储,我不想丢弃表并丢失数据。我目前正在做的是修改schema_migrations
表并手动添加这些冲突的迁移号,然后再次运行rake db:migrate
,直到错误消失,然后我的新迁移开始运行。但这似乎不对。
除了我提到的不涉及丢弃数据库或丢失数据之外,是否有任何可行的解决方案?
答案 0 :(得分:1)
对于此类迁移,您可以使用
在迁移中创建表之前检查table_exists
class Migrationclassname < ActiveRecord::Migration
def up
if table_exists?(:table_name)
# Some changed if required
else
# create table
end
end
def down
end
end
答案 1 :(得分:0)
这种情况发生了4-5次,因为表已经存在,但schema_migrations表似乎与应用程序不同步。
您可以运行rake db:schema:dump
以您的架构文件所说的形式拥有您的数据库。如果提到的表没有显示在模式文件中,那么您肯定可以通过运行rake db:migrate
来创建它们。