2013-01-15 38 views
1

在我无尽的愚蠢中,我使用mysql更改了mysql数据库而不是迁移,因此现在db与迁移不同步。从更改分区重新创建schema.db

我的问题是,如果可以生成缺少的迁移(步骤)和新的schema.db而不丢失数据和db中的更改*

*更改如添加表格,列。

THX

回答

1

至于重建的迁移,你的运气,但如果你走这条路线,你可以重新创建模式

rake db:schema:dump 

,创建一个新的数据库(当新环境等等),你会想做

RAILS_ENV=some_env rake db:schema:load # specify the env if not development 

,而不是

rake db:migrate 

由于您的迁移不符合当前模式。

运行schema:load时要小心,因为它会重新创建数据库。即您将失去所有数据。

+0

谢谢,它现在适用于我.. – user1980779

0

这将是很好的创建缺失的迁移。您可以通过手动将时间戳添加到schema_migrations表来修复您的本地开发数据库。这是手动更改架构的结果。

还要确保rake db:migrate:reset(删除所有表并从头开始迁移)将产生与rake db:schema:dump相同的db/schema.rb。数据库模式中的任何更改都必须通过迁移自动进行。

db:schema:load的问题是它会强制创建表。

+0

是的,但这会导致表数据的完全丢失,对不对? – user1980779

+0

是的,它只会从头开始创建表格,但不会创建数据。所以另一种方法是首先将数据导出到某个地方,然后重置,以便稍后再次加载它。 –