2015-02-24 145 views
2

有沒有什麼辦法可以讓顯示靜態HTML頁面來解釋站點在諸如Play Framework正在編譯新代碼的時候是否處於維護狀態?Play Framework的維護模式

我可以看到我們如何能夠手動創建的東西維護頁面如同時長的數據庫或文件的變化正在發生(在此期間,應用程序可能會處於不一致的狀態),但沒有任何內置的方式進行Play框架?

我知道像Nginx這樣的其他主要服務器軟件有辦法在這裏顯示靜態資源。由於Play Framework也是服務器軟件,它是否具有相同的功能?

+0

「編譯新代碼」使得它聽起來像你在開發模式下運行你的服務器,播放將永遠不會重新編譯生產中的任何東西 - 它不會在產品中進行熱重新加載。 – Ryan 2015-02-24 07:12:02

+0

重新說明你的問題。 「當播放服務器不可用時,您希望播放服務器顯示一個頁面。」這不應該由應用程序本身處理。例如,它應該通過反向代理完成。 – 2015-02-24 07:49:43

+0

@Ryan,在代碼更改後重新啓動服務器(例如'git pull')後,它確實處於生產模式。我並不擔心重新啓動Play所需的時間,但編輯過程可能需要一段時間,Play可以輕鬆地爲靜態頁面提供服務。 – Kat 2015-02-24 08:03:57

回答

4

當然。你最好的選擇是使用request interceptors。這是通過使用請求過濾器,從這些文檔輕輕適應:

import play.api.Logger 
import play.api.mvc._ 

object MaintenanceModeFilter extends Filter { 
    def apply(next: (RequestHeader) => Future[Result])(request: RequestHeader): Future[Result] = { 
    if (/* check for trigger */) { 
     Logger.info("Sending maintenance mode response") 
     Ok(/* your maintenance page */) 
    } else { 
     next(request) 
    } 
    } 
} 

object Global extends WithFilters(AccessLoggingFilter) 

你也許可以使它與onRouteRequest工作,在這些文件中還提到,如果你喜歡。