rake db:migrate是否仅添加新的迁移,还是删除所有迁移/更改并构建所有新的迁移?

我认为rake正在抛出错误,因为它试图访问迁移040中删除的迁移040中的表属性。不知怎的,我的DB和rake不同步,我想修复它们。

对于那里的专家 - rake与迁移不同步是否常见?我怎么能避免这种情况(不,我不会手工编辑我的架构或rake文件)。

有帮助吗?

解决方案

每次使用脚本(如脚本/生成模型......)创建迁移时,都会将新迁移添加到正确的目录中,以便与真实数据库同步。

实际上rake db:migrate只会检查哪些丢失的迁移仍然需要应用到数据库而不关心前一个。

当然,如果您使用其他方式修改数据库,通常会获得不同步的事情,因为正如您所说,您可以发现自己将迁移应用于下面更改的内容。

其他提示

当您使用rails迁移时,会自动创建一个名为 schema_migrations 的表,该表通过存储每次迁移的版本号来跟踪已应用的迁移(这是前面的数字编号)文件名中的迁移名称,即db / migrate / _20090617111204__migration.rb)。运行 rake db:migrate 进行迁移时,只会运行之前未运行的迁移(即表中未包含其版本)(因此,更改迁移时)运行 db:migrate 时,已执行的操作无效。向下迁移时, schema_migrations 中找到的所有版本都将大于您回滚的版本。

迁移意味着您从当前版本迁移到更新版本(如第一个答案中所述)。使用rake db:migrate,您可以对架构应用任何新的更改。但是,如果要回滚到先前的迁移,可以使用rake db:rollback来取消新更改(如果定义不正确)。警告:通过这样做,您的数据将会丢失。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top