在我无尽的愚蠢中,我使用 mysql 而不是迁移更改了 mysql 数据库,所以现在数据库与迁移不同步。
我的问题是,是否可以在不丢失数据和数据库中的更改*的情况下生成丢失的迁移(步骤)和新的 schema.db?
*添加表格、列等更改。
谢谢
在我无尽的愚蠢中,我使用 mysql 而不是迁移更改了 mysql 数据库,所以现在数据库与迁移不同步。
我的问题是,是否可以在不丢失数据和数据库中的更改*的情况下生成丢失的迁移(步骤)和新的 schema.db?
*添加表格、列等更改。
谢谢
就重新创建迁移而言,您很不走运,但您可以重新创建架构
rake db:schema:dump
如果你走这条路,在创建一个新的数据库(用于新环境等)时,你会想要做
RAILS_ENV=some_env rake db:schema:load # specify the env if not development
代替
rake db:migrate
因为您的迁移与当前架构不一致。
运行时要小心,schema:load
因为它会从头开始重新创建数据库。即您将丢失所有数据。
创建丢失的迁移会很好。schema_migrations
您可以通过手动将时间戳添加到表中来修复本地开发数据库。这就是手动更改架构的结果。
还要确保rake db:migrate:reset
(删除所有表并从头开始迁移)将产生相同db/schema.rb
的rake db:schema:dump
结果。数据库模式中的任何更改都必须通过迁移自动化。
rake 的问题db:schema:load
在于它会强制创建表。