我过去常常认为Rails项目中的db/schema.rb存储了数据库模式,这样ActiveRecord就可以知道它有什么表/列。
但早些时候,我惊讶地注意到我的项目在删除db/schema.rb后运行正常!
那么,既然Rails可以在没有它的情况下工作,那么schema.rb到底能做什么呢?
发布于 2012-03-27 14:38:07
schema.rb主要用于两个目的:
schema.rb,你可以在那里看一看。ActiveRecord本身确实不会使用它。它将在运行时内省数据库,因为这比期望用户保持schema.rb最新要安全得多。但是,为了避免开发人员感到困惑,您应该始终维护一个与迁移保持同步的最新文件。rake db:schema:dump通常作为rake test:prepare运行的一部分运行。其目的是使测试数据库的架构与当前开发数据库完全匹配。发布于 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.
https://stackoverflow.com/questions/9884429
复制相似问题