Ruby on rails 迁移创建失效的表
环境 ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-darwin10.8.0];轨道3.2.6;OSX 10.6.8 问题Ruby on rails 迁移创建失效的表,ruby-on-rails,rails-migrations,Ruby On Rails,Rails Migrations,环境 ruby 1.9.3p194(2012-04-20修订版35410)[x86_64-darwin10.8.0];轨道3.2.6;OSX 10.6.8 问题 即使在重置数据库(rake db:reset)之后,迁移也会生成错误的表、字段和模式,这些表、字段、限制、索引等都已被早期迁移规范弃用。 背景 我在两个OSX 10.6.8系统之间来回移动了一个github协作项目在上一次迁移中,通过在一次初始迁移中整合预期的表定义,重新开始了迁移(消除了以前许多迁移规范的大量混乱和费劲的处理)。
- 即使在重置数据库(rake db:reset)之后,迁移也会生成错误的表、字段和模式,这些表、字段、限制、索引等都已被早期迁移规范弃用。
- 我在两个OSX 10.6.8系统之间来回移动了一个github协作项目在上一次迁移中,通过在一次初始迁移中整合预期的表定义,重新开始了迁移(消除了以前许多迁移规范的大量混乱和费劲的处理)。
- 几个月来,修改后的迁移忠实地生成了表和模式
- 在从便携式系统同步公共存储库后,将我们的项目拉到我的主要开发系统后,进一步的迁移将保留许多表和字段,而这些表和字段实际上在任何现有迁移中都没有定义,也不是由其他合作者的开发环境中的相同迁移生成的。换句话说,许多已失效/弃用的字段和表以某种方式保留了很久以前从修订的迁移中删除的规范因此db:migrate在这个系统上产生错误的表和模式,即使在运行rake db:reset之后也是如此。
- 那么,以前的规定可能会保留在开发环境的某个地方,因此有必要以某种方式删除、修订或覆盖以前不再存在的定义,这些定义仍然会出现在不需要的表和字段中。
- 在纠正这一问题时,强迫取消现有工作是非常不可取的
那么,重新生成符合我们在项目中保留的迁移规范的迁移、表和模式的正确有效方法是什么?请参考以下参考:
rake db:schema:load
直接从schema.rb文件加载数据库架构,但在生产中要小心,因为这会删除生产数据
通过推导以下过程,我最终能够生成符合迁移规范的模式和表:
ActiveRecord::Schema.define(:version => 0) do
end
- 在试图诊断可能的影响因素时,project Searchs在我的错误模式之外的任何文件中都没有找到对不推荐使用的表或字段的引用因此,我假设由于某种原因(可能是处理错误?)错误的现有模式引用会持续存在于进一步的过程中
- 在任何情况下,从my local schema.rb中删除所有指令后,重置和定期迁移成功地生成了一个符合迁移规范的模式,而以前的工作生成的模式错误地保留了冗余的表、字段等,因此,似乎从以前的(已失效的)本地模式一直存在。
- 因此,如果rake db:reset显然是从一个失效的模式生成表和模式,而该模式进程没有根据现有的迁移规范重新生成,,那么这些结果(我现在已经重复了)指出db:reset中的一个逻辑缺陷――它本身应该清除先前的模式,因此,db:reset既不保留也不错误地依赖于先前模式的规范
- 为了那些可能在编写迁移时引入自己的意外错误的人的安全,我还建议在重建合法模式之前,db:reset首先将现有(失效)模式复制到时间戳备份中,有问题的迁移可以通过依赖前一个模式的记录来纠正