这是一个非常简单的问题:如何运行可以同时处理多个主机的Yesod应用程序?
默认的Yesod设置可以处理来自任何主机的传入连接,但所有URL都会以approot
为前缀呈现。如果有一种方法可以存储当前域以使其可用于该函数,那么在Yesod实例声明中覆盖joinPath
是可能的,但是没有。
this wiki page上描述的方法有效,但是非常hackish,因为它强制路由采用额外的domain
参数(因为我没有一组静态的域来匹配)。出于实际目的(因为我有很多路由,其中一些是与域无关的),最好有一个解决方案使路由不受影响,因为仍然可以从WAI请求信息中获取主机名。处理函数。
我使用需要绝对网址的内容(例如电子邮件,RSS,XML API),因此approot _ = ""
不是选项。
我没有,也无法在编译时知道所有需要支持的主机名。
那么,如何呈现URL以便他们使用传入请求的主机名,而不是approot
变量?
答案 0 :(得分:3)
一种方法是在基础类型中包含实际域名,并根据请求使用中间件到适当的应用程序,并根据需要生成新的域名。然而,这感觉太重了。
我希望保持原样,因为它符合一般情况,但也许我们可以添加一个额外的方法approotRequest,它也将被赋予Request
值。我想把这个讨论移到列表中。
更新:已在Git中登陆的更改:https://github.com/yesodweb/yesod/commit/4dd9880389e3b61f976e44525ae97831ec578a17