rake db:migrate究竟是什么做的?

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

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

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

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

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

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

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

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