跳轉到內容

Yesod Web 框架/模型

來自華夏公益教科書,開放世界開放書籍

使用記憶體可變資料(在基礎資料型別中)

[編輯 | 編輯原始碼]

例如,訪客計數。參見 ref.[1]

資料庫層

[編輯 | 編輯原始碼]
  • persistent 是資料庫訪問層的名稱,它包含用於為實體和鍵生成型別以及模式初始化的模板。[2][3][4]

它對 PostgreSQLSQLiteMongoDBCouchDBMySQL 提供了一流的支援,並對 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 rawSQLEsqueleto 查詢的示例。[10]

電子郵件

[編輯 | 編輯原始碼]

以下軟體包是yesod-platform 的一部分:[11]

  • email-validate:驗證電子郵件地址。[12]
  • mime-mail:撰寫和傳送MIME 電子郵件。[13]
  • 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 助手”工具

[編輯 | 編輯原始碼]
  • yesod 助手工具[16]
    • 從專案站點執行yesod devel,在每次檔案樹修改時重新編譯並重啟專案。
    • yesod add-handler 在專案中新增一個新的處理程式和模組,並在“Application”模組中新增處理程式的import 子句。

使用 Keter 部署:一個 Web 應用程式伺服器監控器和反向代理伺服器

[編輯 | 編輯原始碼]

參見 refs.[17][18] [19]

Keter 是一個作為服務的程序,用於處理 Yesod Web 應用程式 伺服器的部署和重啟,以及每個Web 應用程式PostgreSQL 資料庫建立。

控制檯命令yesod keter 將 Web 應用程式打包為 keter 包,以上傳到名為“incoming”的 keter 資料夾。

Keter 監控“incoming”資料夾並解壓縮應用程式到一個臨時的資料夾,然後為 Web 應用程式分配一個埠以偵聽,並啟動它。

最初,它使用 Nginx 作為反向代理(keter 版本 0.1*),將 虛擬伺服器 條目新增到其配置中,並使 Nginx 重新載入它,但現在 Keter 本身提供了自己的反向代理 功能,刪除了對 Nginx 的依賴,並充當主要 Web 伺服器。[20]

舊文件(基於 Nginx)。[21][22]

與從函式式語言生成的 JavaScript 整合

[編輯 | 編輯原始碼]

參見 ref.[23][24][25]

參考資料

[編輯 | 編輯原始碼]
  1. "Book - 在基礎資料型別中初始化資料". Yesodweb.com. 檢索於 2014-05-26.
  2. a b c "book - 持久化". Yesodweb.com. 檢索於 2012-10-23.
  3. "Yesod-persistent 包". Hackage.haskell.org. 檢索於 2012-10-23.
  4. "Yesod-persistent 文件". github.com. 檢索於 2018-10-16.
  5. "Yesod-persistent 實體語法". github.com. 檢索於 2018-10-16.
  6. "欄位預設值的冗餘遷移". GitHub.com. 檢索於 2012-12-04.
  7. ""最多一個" 基數在 persistent 中用 Checkmark 型別強制執行". Hackage.haskell.org. 檢索於 2018-10-16.
  8. "如何使用 Yesod/Persistent 建立外部索引鍵約束?". stackoverflow.com. 檢索於 2018-10-16.
  9. "esqueleto 包". Hackage.haskell.org. 檢索於 2012-10-23.
  10. "查詢示例". Stackoverflow.com. 2012-09-19. 檢索於 2012-10-23.
  11. "Yesod 包". Hackage.haskell.org. 檢索於 2019-06-26.
  12. "Email-validate 包". Hackage.haskell.org. 檢索於 2012-10-26.
  13. "Mime-mail 包". Hackage.haskell.org. 檢索於 2012-10-26.
  14. "Yesod-fb 包". Hackage.haskell.org. 檢索於 2012-10-26.
  15. Haskell Stack - 如何安裝
  16. Yesod-bin 包包含輔助工具(包含使用 stack 工具的說明)
  17. "book - 部署您的 Web 應用程式". Yesodweb.com. 檢索於 2012-10-23.
  18. Readme.Md. "Yesod keter 自述檔案". GitHub. 檢索於 2012-10-23.
  19. "Keter 包". Hackage.haskell.org. 檢索於 2012-10-23.
  20. "Keter 更新". Yesodweb.com. 2012-10-25. 檢索於 2012-10-25.
  21. "Keter: Web 應用程式部署". Yesodweb.com. 2012-05-11. 檢索於 2012-10-23.
  22. "Keter: 它活了!". Yesodweb.com. 2012-05-17. 檢索於 2012-10-23.
  23. "Yesod、AngularJS 和 Fay". yesodweb.com. 2012-10-30. 檢索於 2014-03-12.
  24. "HaskellWiki - JavaScript 問題". haskell.org. 檢索於 2014-04-12.
華夏公益教科書