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.