2012-02-07 18 views
6

這是一個非常簡單的問題:如何運行可以同時處理多個主機的Yesod應用程序?主機名獨立的Yesod應用程序

默認的Yesod安裝程序可以處理來自任何主機的傳入連接,但所有URL均使用前綴approot進行渲染。在Yesod實例聲明中覆蓋joinPath將是可能的,如果存在當前域的存儲方式以使其可用於該功能但不存在。

this wiki page上描述的方法工作,但是非常黑客,因爲它強制路由採取額外的domain參數(因爲我沒有一組靜態域來匹配)。出於實際的目的(因爲我有很多路由,其中​​一些路由是域獨立的),最好有一個解決方案保持路由不變,因爲仍然可以從WAI請求信息中獲取主機名一個處理函數。

我使用需要絕對URL(如電子郵件,RSS,XML API)的東西,所以approot _ = ""不是一個選項。

我不知道在編譯時需要支持的所有主機名。

那麼,我該如何渲染URL,以便它們使用傳入請求的主機名,而不是approot變量?

回答

3

一種方法是將實際的域名包含在基礎類型中,並根據請求使用一箇中間件供應給適當的應用程序,根據需要產生新的。但是,這種感覺太重了。

我想離開approot,因爲它符合一般情況,但也許我們可以添加一個額外的方法approotRequest,該值將被賦予Request的值。我想將這個討論移到列表中。

更新:改變已經登陸Git中:https://github.com/yesodweb/yesod/commit/4dd9880389e3b61f976e44525ae97831ec578a17

+0

下面筆者就將討論,並希望更新這個答案(其他用戶)一次的解決辦法是在回購協議。謝謝! – dflemstr 2012-02-08 20:56:38