0

我昨天在 Rails 3.2.14 中向我们的生产数据库添加了一些多列索引,当我运行迁移时,它失败并出现错误,表明请求的索引已经存在。但是,它不在schema.rb文件中。我觉得这有点莫名其妙。我没有创建索引,也找不到创建它们的迁移。

这个应用程序的开发数据库是 SQLite,但生产数据库是 MySQL。索引是否有可能是在开发迁移中创建的,该迁移在开发中运行但在投入生产之前被编辑/回滚,并且 SQLite 没有删除索引?schema.rb总是显示所有索引,还是只显示迁移显式添加的索引?

4

1 回答 1

0

根据 Rails Guides,答案是肯定的。Schema.rb 反映了数据库中的表、列和索引,但请记住,它仅在您在db命名空间中运行大多数 rake 命令时才会更新。

如果选择了 :ruby,则模式存储在 db/schema.rb 中。如果您查看此文件,您会发现它看起来非常像一个非常大的迁移:

[架构示例]

在许多方面,这正是它的本质。该文件是通过检查数据库并使用 create_table、a​​dd_index 等来表达其结构来创建的。因为这是独立于数据库的,所以它可以加载到 Active Record 支持的任何数据库中。如果您要分发能够针对多个数据库运行的应用程序,这可能非常有用。

资料来源: http: //guides.rubyonrails.org/migrations.html#types-of-schema-dumps

于 2013-11-01T15:00:05.590 回答