Rails:schema.rb做什么?

时间:2012-03-27 06:32:15

标签: ruby-on-rails activerecord

我曾经认为db/schema.rb项目中的Rails存储了数据库架构,因此ActiveRecord可以知道它有哪些表/列。

但早些时候我惊讶地注意到我删除db/schema.rb之后我的项目正常运行!

那么,既然Rails可以在没有它的情况下工作,那么schema.rb真正做了什么?

2 个答案:

答案 0 :(得分:98)

schema.rb主要用于两个目的:

  1. 它记录了数据库模式的最终当前状态。通常,特别是当您进行多次迁移时,仅从迁移中删除模式很困难。有了schema.rb,你可以看一下。 ActiveRecord本身确实不会使用它。它会在运行时期间对数据库进行内省,因为这比期望用户保持schema.rb最新更安全。但是,为避免混淆您的开发人员,您应始终维护一个与您的迁移最新的文件。

  2. 测试使用它来填充数据库模式。因此,rake db:schema:dump通常作为rake test:prepare运行的一部分运行。目的是测试数据库的模式与当前的开发数据库完全匹配。

答案 1 :(得分:3)

Rails Documentation / 6.1 What are Schema Files for?

  

迁移,尽管可能很强大,但并不是权威来源   对于您的数据库架构。该角色属于db / schema.rb或   Active Record通过检查数据库生成的SQL文件。他们   不是为了编辑而设计的,它们只代表当前的状态   数据库。

     

部署新的实例不需要(并且容易出错)   通过重播整个迁移历史记录的应用程序。它简单得多   并且更快地加载到数据库中的当前描述   架构。

     

例如,这是测试数据库的创建方式:当前   开发数据库被转储(到db / schema.rb或   db / structure.sql)然后加载到测试数据库中。

     

如果您想快速查看内容,架构文件也很有用   Active Record对象具有的属性。此信息不在   模型的代码经常分散在几个迁移中,但是   信息很好地总结在模式文件中。该   annotate_models gem会自动在顶部添加和更新注释   如果您需要该功能,请汇总每个模型。

Rails documents have you covered.