首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails: schema.rb是做什么的?

Rails: schema.rb是做什么的?
EN

Stack Overflow用户
提问于 2012-03-27 14:32:15
回答 2查看 28.8K关注 0票数 77

我过去常常认为Rails项目中的db/schema.rb存储了数据库模式,这样ActiveRecord就可以知道它有什么表/列。

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

那么,既然Rails可以在没有它的情况下工作,那么schema.rb到底能做什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-27 14:38:07

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

  1. 它记录了数据库架构的最终当前状态。通常,特别是当您有两个以上的迁移时,很难仅从迁移中推断出模式。有了礼物schema.rb,你可以在那里看一看。ActiveRecord本身确实不会使用它。它将在运行时内省数据库,因为这比期望用户保持schema.rb最新要安全得多。但是,为了避免开发人员感到困惑,您应该始终维护一个与迁移保持同步的最新文件。

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

Stack Overflow用户

发布于 2017-02-09 19:57:43

Rails Documentation / 6.1 What are Schema Files for?

尽管

迁移功能强大,但它们并不是数据库模式的权威来源。该角色属于db/schema.rb或活动记录通过检查数据库生成的SQL文件。它们不是为编辑而设计的,它们只是表示数据库的当前状态。

不需要(而且容易出错)通过重播整个迁移历史来部署应用程序的新实例。将当前模式的描述加载到数据库中要简单得多,速度也快得多。

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

如果您希望快速查看活动记录对象具有哪些属性,则架构文件也很有用。这些信息不在模型的代码中,并且经常分布在多个迁移中,但是这些信息在模式文件中总结得很好。如果您需要该功能,annotate_models gem会自动在每个模型的顶部添加和更新注释,总结模式。

Rails documents have you covered.

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9884429

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档