我昨天在Rails 3.2.14中为我们的生产数据库添加了一些多列索引,当我运行迁移时,它失败并显示一条错误,表明请求的索引已经存在。但是,它不在schema.rb
文件中。我发现这有点莫名其妙。我没有创建索引,也找不到创建它们的迁移。
此应用程序的开发数据库是SQLite,但生产数据库是MySQL。是否有可能在开发中运行的开发迁移中创建了索引,但是在开始生产之前已经编辑/回滚,而SQLite没有删除索引? schema.rb
是否始终显示所有索引,或仅显示由迁移明确添加的索引?
答案 0 :(得分:0)
根据Rails指南,答案是肯定的。 Schema.rb反映了数据库中的表,列和索引,但请记住,只有在db
命名空间中运行大多数rake命令时才会更新它。
如果:选择了ruby,则架构存储在db / schema.rb中。如果你看一下这个文件,你会发现它看起来非常像一个非常大的迁移:
[架构示例]
在很多方面,这正是它的本质。 通过使用create_table,add_index等检查数据库并表达其结构来创建此文件。因为这是独立于数据库的,所以可以将其加载到Active Record支持的任何数据库中。如果您要分发能够针对多个数据库运行的应用程序,这可能非常有用。
来源:http://guides.rubyonrails.org/migrations.html#types-of-schema-dumps