Yesod Web 框架/模型
外觀
例如,訪客計數。參見 ref.[1]
它對 PostgreSQL、SQLite、MongoDB、CouchDB 和 MySQL 提供了一流的支援,並對 Redis 提供了實驗性支援。[2]
資料庫佈局在模板中描述,該模板列出了實體、欄位和約束。[5]
- 對於每個列出的實體,都會生成一個整型主鍵列“id”,具有自動遞增和主鍵屬性,類型別名為實體名稱附加 Id
- 對於每個列出的實體,都會生成一個名為實體的記錄型別,其中記錄欄位名稱由將實體名稱作為字首新增到欄位名稱(如“personName”)組成。還會為來自其他實體的外部索引鍵引用生成一個 EntityField 型別“PersonName”。
- 存在一個自動的資料庫模式遷移機制,用於資料庫模式更新,為了成功,在將列新增到現有表時,需要使用SQL 級別的表示法指定預設列值約束。[6]
- “最多一個”基數在 Checkmark 型別周圍有一個特殊的機制。[7]
- 弱實體(生命中受約束的擁有者-子關係中的子項)沒有對級聯刪除觸發器的特殊支援,但在 Database.Persist.Class 模組中,可以使用deleteCascade 函式手動進行級聯刪除。[8]
- 自動建立表、更新模式和遷移表
- 對實體模板的修改會產生模式更新,並會自動建立表,並會為支援“ALTER TABLE”SQL 命令的DBMS 生成遷移,這些命令位於migrateAll 過程中,由模板內容生成。在 ref.[2] 中的“遷移”部分查詢支援遷移的DBMS。
share [mkPersist sqlSettings,
mkMigrate "migrateAll" -- generates the migration procedure with the specified name
] [persist|
User -- table name and entity record type
-- implicit autoincrement column "id" as primary key, typed UserId
ident Text -- refers to db. table column "ident";
-- generates a record field prefixing the table name as "userIdent"
password Text Maybe -- Maybe indicates Nullable field
UniqueUser ident -- unique constraint with space sep. field sequence
Email -- table name and entity record type
-- implicit autoincrement column "id" as primary key, typed EmailId
email Text
user UserId -- foreign key by specifying other tables EntityField types
verkey Text Maybe
newlyAddedColumn Text "default='sometext'::character varying" -- sql level Default constraint
UniqueEmail email -- unique constraint
|]
- Esqueleto:是一個 Haskell 組合器層,用於生成正確的關聯查詢到persistent。[9]
persistent rawSQL 和 Esqueleto 查詢的示例。[10]
以下軟體包是yesod-platform 的一部分:[11]
- fb 庫和 Yesod 之間有用的粘合函式。[14]
新的 Yesod 應用程式是從 HaskellStack 工具[15] 模板生成的,替換了以前的命令“yesod init”
基於Stack 的應用程式模板名稱以 yesod 為字首,如“yesod-{minimal | postgres | sqlite | mysql | mongo | ...}”
- 由於 HaskellStack 預設使用stackage 倉庫,因此應該在“stack.yaml”的extra-deps 部分引用hackage 倉庫中的額外軟體包。
- 您可以將軟體包自定義到本地子資料夾。它們必須在“stack.yaml”的packages 部分引用。
- yesod 助手工具[16]
- 從專案站點執行
yesod devel,在每次檔案樹修改時重新編譯並重啟專案。 yesod add-handler在專案中新增一個新的處理程式和模組,並在“Application”模組中新增處理程式的import 子句。
- 從專案站點執行
Keter 是一個作為服務的程序,用於處理 Yesod Web 應用程式 伺服器的部署和重啟,以及每個Web 應用程式 的 PostgreSQL 資料庫建立。
控制檯命令yesod keter 將 Web 應用程式打包為 keter 包,以上傳到名為“incoming”的 keter 資料夾。
Keter 監控“incoming”資料夾並解壓縮應用程式到一個臨時的資料夾,然後為 Web 應用程式分配一個埠以偵聽,並啟動它。
最初,它使用 Nginx 作為反向代理(keter 版本 0.1*),將 虛擬伺服器 條目新增到其配置中,並使 Nginx 重新載入它,但現在 Keter 本身提供了自己的反向代理 功能,刪除了對 Nginx 的依賴,並充當主要 Web 伺服器。[20]
與從函式式語言生成的 JavaScript 整合
[編輯 | 編輯原始碼]- ↑ "Book - 在基礎資料型別中初始化資料". Yesodweb.com. 檢索於 2014-05-26.
- ↑ a b c "book - 持久化". Yesodweb.com. 檢索於 2012-10-23.
- ↑ "Yesod-persistent 包". Hackage.haskell.org. 檢索於 2012-10-23.
- ↑ "Yesod-persistent 文件". github.com. 檢索於 2018-10-16.
- ↑ "Yesod-persistent 實體語法". github.com. 檢索於 2018-10-16.
- ↑ "欄位預設值的冗餘遷移". GitHub.com. 檢索於 2012-12-04.
- ↑ ""最多一個" 基數在 persistent 中用 Checkmark 型別強制執行". Hackage.haskell.org. 檢索於 2018-10-16.
- ↑ "如何使用 Yesod/Persistent 建立外部索引鍵約束?". stackoverflow.com. 檢索於 2018-10-16.
- ↑ "esqueleto 包". Hackage.haskell.org. 檢索於 2012-10-23.
- ↑ "查詢示例". Stackoverflow.com. 2012-09-19. 檢索於 2012-10-23.
- ↑ "Yesod 包". Hackage.haskell.org. 檢索於 2019-06-26.
- ↑ "Email-validate 包". Hackage.haskell.org. 檢索於 2012-10-26.
- ↑ "Mime-mail 包". Hackage.haskell.org. 檢索於 2012-10-26.
- ↑ "Yesod-fb 包". Hackage.haskell.org. 檢索於 2012-10-26.
- ↑ Haskell Stack - 如何安裝
- ↑ Yesod-bin 包包含輔助工具(包含使用 stack 工具的說明)
- ↑ "book - 部署您的 Web 應用程式". Yesodweb.com. 檢索於 2012-10-23.
- ↑ Readme.Md. "Yesod keter 自述檔案". GitHub. 檢索於 2012-10-23.
- ↑ "Keter 包". Hackage.haskell.org. 檢索於 2012-10-23.
- ↑ "Keter 更新". Yesodweb.com. 2012-10-25. 檢索於 2012-10-25.
- ↑ "Keter: Web 應用程式部署". Yesodweb.com. 2012-05-11. 檢索於 2012-10-23.
- ↑ "Keter: 它活了!". Yesodweb.com. 2012-05-17. 檢索於 2012-10-23.
- ↑ ↑ "Yesod、AngularJS 和 Fay". yesodweb.com. 2012-10-30. 檢索於 2014-03-12.
- ↑ "HaskellWiki - JavaScript 問題". haskell.org. 檢索於 2014-04-12.