如何在finagle中托管静态资源

时间:2013-09-09 06:47:33

标签: scala finagle

我正试图在finagle中托管静态资源,比如javascript和css文件。

我设法让它工作,但我必须在路由服务中专门配置每个路由到资源文件夹。例如:

def build():RoutingService[Request with Request] = {
      val routingService = RoutingService.byPathObject {
        case Root => ControllerRegistry.rootController.root()
        case Root / "public" / resource =>  ControllerRegistry.publicController.findPublic()
        case Root / "public" / "bootstrap"/ "css" / resource => ControllerRegistry.publicController.findPublic()

      }
      routingService
    }

def findPublic(): Service[Request, Response] = {
      val findPublic = new Service[Request, Response] {
        def apply(request: Request) = {
          Future {
            val resource = Path(request.path) match {
              case Root / "public" / resource => getResourceText(s"/public/$resource")
              case Root / "public" / "bootstrap" / "css" / resource => getResourceText(s"/public/bootstrap/css/$resource")
              case _ => throw new IllegalStateException
            }

            val response = Response()

            response.setContent(copiedBuffer(resource, UTF_8))
            response
          }
        }
      }
      findPublic
    }

现在我可以在publicpublic/bootstrap/css中获取任何资源,但如果没有更多配置,我就无法获得public/bootstrap/js

1 个答案:

答案 0 :(得分:6)

TLDR:Finagle并不是正确的库,可以满足您的需求。您可以使用基于finagle构建的Finatra之类的东西。

长版: Finagle旨在构建分布式系统,它不像轨道上的ruby那样的Web框架(即使finagle-http提供了非常基本的功能)。它可以轻松构建彼此交互的服务(并负责负载平衡,超时,断开连接,背压,分布式跟踪......) 我们在Twitter上建立了一个基于finagle构建的Web框架库,但它尚未开源,同时您可以使用Finatra