簡體   English   中英

Rails:schema.rb 有什么作用?

[英]Rails: what does schema.rb do?

我曾經認為Rails項目中的db/schema.rb存儲了數據庫模式,以便ActiveRecord可以知道它有什么表/列。

但早些時候我驚訝地注意到我的項目在刪除db/schema.rb后正常運行!

那么,既然Rails可以在沒有它的情況下工作,那么schema.rb到底有什么作用呢?

schema.rb主要有兩個目的:

  1. 它記錄了數據庫模式的最終當前狀態。 通常,尤其是當您有多個遷移時,很難僅從遷移中推斷出模式。 有了現在的schema.rb ,你就可以看看那里。 ActiveRecord 本身確實不會使用它。 它將在運行時內省數據庫,因為這比期望用戶保持schema.rb最新要安全得多。 但是,為了避免混淆您的開發人員,您應該始終維護一個與您的遷移保持同步的文件。

  2. 測試使用它來填充數據庫模式。 因此, rake db:schema:dump通常作為 rake test:prepare運行的一部分運行。 目的是測試數據庫的模式與當前的開發數據庫完全匹配。

Rails 文檔 / 6.1 Schema 文件的用途是什么?

遷移雖然強大,但並不是數據庫模式的權威來源。 該角色屬於 db/schema.rb 或 Active Record 通過檢查數據庫生成的 SQL 文件。 它們不是為編輯而設計的,它們只是代表數據庫的當前狀態。

無需(而且很容易出錯)通過重放整個遷移歷史來部署應用程序的新實例。 將當前模式的描述加載到數據庫中要簡單得多,速度也更快。

例如,測試數據庫是這樣創建的:將當前的開發數據庫轉儲(轉儲到 db/schema.rb 或 db/structure.sql),然后加載到測試數據庫中。

如果您想快速查看 Active Record 對象具有哪些屬性,架構文件也很有用。 此信息不在模型的代碼中,並且經常分布在多個遷移中,但該信息很好地總結在模式文件中。 如果您需要該功能, annotate_models gem 會自動添加和更新每個模型頂部的注釋,總結模式。

Rails 文檔已經涵蓋了您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM