rake db:migrate 只添加新的迁移,还是放弃所有迁移/更改并构建新的所有内容?
我认为 rake 正在引发错误,因为它试图访问在迁移 042 中删除的迁移 040 中的表属性。不知何故,我的数据库和 rake 不同步,我想修复它们。
对于你们那里的专家 - rake 与迁移不同步是否常见?我怎样才能避免这种情况(不,我不手动编辑我的架构或 rake 文件)。
rake db:migrate 只添加新的迁移,还是放弃所有迁移/更改并构建新的所有内容?
我认为 rake 正在引发错误,因为它试图访问在迁移 042 中删除的迁移 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 来取消您的新更改(如果它们定义不正确)。注意:这样做您的数据将会丢失。