6

这是一个非常简单的问题:如何运行一个可以同时处理多个主机的 Yesod 应用程序?

默认的 Yesod 设置可以处理来自任何主机的传入连接,但所有 URL 都会approot在它们前面呈现。joinPath如果有一种方法可以存储当前域以便该函数可以使用它,那么在 Yesod 实例声明中覆盖是可能的,但没有。

此 wiki 页面上描述的方法有效,但非常 hackish,因为它强制路由采用附加domain参数(因为我没有一组静态域来匹配)。出于实际目的(因为我有很多路由,其中​​一些与域无关),最好有一个不影响路由的解决方案,因为仍然可以从 WAI 请求信息中获取主机名一个处理函数。

我使用需要绝对 URL 的东西(例如电子邮件、RSS、XML API),所以approot _ = ""不是一个选项。

在编译时,我不知道也不能知道所有需要支持的主机名。

那么,如何呈现 URL,以便它们使用传入请求的主机名,而不是approot变量?

4

1 回答 1

3

一种方法是在基础类型中包含实际域名,并使用中间件根据请求转移到适当的应用程序,并在必要时生成新的。但是,这感觉太重了。

我想按原样保留 approot,因为它适合一般情况,但也许我们可以添加一个额外的方法 approotRequest,它也会被赋予Request值。我想将此讨论移到列表中。

更新:更改已经登陆 Git:https ://github.com/yesodweb/yesod/commit/4dd9880389e3b61f976e44525ae97831ec578a17

于 2012-02-08T13:49:55.413 回答