2015-02-24 3 views
2

Есть ли способ включить отображение статической HTML-страницы, чтобы объяснить, что сайт находится в обслуживании в течение времени, например, когда Play Framework компилирует новый код?Режим обслуживания для платформы воспроизведения

Я вижу, как мы могли вручную создать страницу обслуживания для таких вещей, как при длительной работе с базой данных или файлом (во время которой приложение может находиться в противоречивом состоянии), но существует ли какой-либо встроенный подход для Play Framework?

Я знаю, что некоторые другие основные серверные программы, такие как Nginx, имеют способ отображения статического ресурса здесь. Поскольку Play Framework также является серверным программным обеспечением, имеет ли он эквивалент?

+0

«компиляция нового кода» заставляет задуматься о том, что вы запускаете свой сервер в режиме dev, Play никогда не перекомпилирует что-либо в производстве - он не выполняет горячую перезагрузку в prod. – Ryan

+0

Перефразируйте свой вопрос. «Вы хотите, чтобы игровой сервер отображал страницу, когда игровой сервер недоступен». Это не должно обрабатываться самим приложением. Например, это нужно сделать с помощью обратного прокси. –

+0

@ Ryan, это действительно в эффективном режиме, после перезапуска сервера после изменения кода (например, 'git pull'). Меня не беспокоит время, необходимое для перезапуска Play, но процесс компиляции может занять некоторое время, в течение которого Play может легко обслуживать статическую страницу. – Kat

ответ

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, также упоминается в этих Документах, если вы предпочитаете.

Смежные вопросы