【问题标题】:Maintenance mode for the Play FrameworkPlay 框架的维护模式
【发布时间】:2015-04-25 14:41:06
【问题描述】:

是否有任何方法可以显示静态 HTML 页面来说明站点在诸如 Play Framework 编译新代码时处于维护状态?

我可以看到我们如何手动为诸如长时间数据库或文件更改(在此期间应用程序可能处于不一致状态)之类的事情创建维护页面,但是是否有任何内置方法播放框架?

我知道其他一些主要的服务器软件比如 Nginx 有一种方法可以在这里显示静态资源。既然 Play Framework 也是服务端软件,有没有等价的?

【问题讨论】:

  • “编译新代码”听起来像是在开发模式下运行服务器,Play 永远不会在生产环境中重新编译任何东西——它不会在 prod 中进行热重载。
  • 重新表述您的问题。 “您希望播放服务器在播放服务器不可用时显示一个页面。”这不应该由应用程序本身处理。例如,它应该由反向代理完成。
  • @Ryan,它确实处于生产模式,在代码更改后重新启动服务器(例如,git pull)。我不关心重新启动 Play 所需的时间,但编译过程可能需要一些时间,在此期间 Play 可以轻松提供静态页面。
  • 如果这就是你想要的,那么你需要一个反向代理,正如@i.am.michiel 所说。在此期间,Play 将不会响应任何请求。
  • @i.am.michiel,我想这里可能有两种不同的可能性。一种是在我无法显示正常页面的情况下显示替代页面(例如,必须生成一些数据库表,并且在完成之前我们无法显示常规内容)。 acjay 的回答似乎适用于此。另一种可能性是在编译过程中显示替代页面,正如我在对 Ryan 的评论中所描述的那样。如果反向代理是解决此问题的方法,您能否详细说明我将如何设置它?

标签: playframework playframework-2.0


【解决方案1】:

当然。你最好的选择是使用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,在这些文档中也提到过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多