跳转到内容

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.
华夏公益教科书