rake db:migrate是否仅添加新的迁移,还是删除所有迁移/更改并构建所有新的迁移?
我认为rake会抛出错误,因为它试图访问迁移040中删除的迁移040中的表属性.不知何故,我的数据库和rake不同步,我想修复它们.
对于那里的专家 - rake与迁移不同步是否常见?我怎么能避免这种情况(不,我不会手工编辑我的架构或rake文件).
使用rails迁移时,schema_migrations
会自动创建一个调用的表,该表通过存储每次迁移的版本号来跟踪已应用的迁移(这是在文件名中以迁移名称开头的数字,即db/migrate /_20090617111204__migration.rb).当您运行rake db:migrate
向上迁移时,将仅运行以前未运行的迁移(即,它们的版本未包含在表中)(因此,更改已执行的迁移在运行时将不起作用db:migrate
).向下迁移时,其中找到的所有版本schema_migrations
都大于您回滚到的版本将被撤消.
每次使用脚本(如脚本/生成模型...)创建迁移时,都会将新迁移添加到正确的目录中,以便与真实数据库同步.
实际上rake db:migrate只是检查哪些丢失的迁移仍然需要应用到数据库而不关心前一个.
当然,如果您使用其他方式修改数据库通常会获得不同步的事情,因为正如您所说,您可以发现自己将迁移应用于下面更改的内容.
迁移意味着您从当前版本移动到更新版本(如第一个答案中所述).使用rake db:migrate,您可以对架构应用任何新的更改.但是,如果要回滚到先前的迁移,可以使用rake db:rollback来取消新更改(如果定义不正确).警告:这样做会导致数据丢失.