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