Как разместить статические ресурсы в finagle

Я пытаюсь разместить статические ресурсы, такие как файлы JavaScript и CSS, в Finagle.

Мне удалось заставить его работать, но я должен специально настроить каждый маршрут к папке ресурса в моей службе маршрутизации. Например:

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
    }

Теперь я могу получить любой ресурс в public а также public/bootstrap/css, но я не могу получить public/bootstrap/js без дополнительной настройки.

1 ответ

Решение

TLDR: Finagle - не совсем подходящая библиотека для того, что вы хотите. Вы можете использовать что-то вроде Finatra, которое построено на вершине finagle.

Длинная версия: Finagle предназначен для создания распределенных систем, это не веб-фреймворк, как ruby ​​on rails (даже если finagle-http предоставляет очень простую функцию для этого). Это позволяет легко создавать сервисы, которые взаимодействуют друг с другом (и заботятся о балансировке нагрузки, тайм-ауте, отключении, обратном давлении, распределенной трассировке,...). В Твиттере есть библиотека веб-фреймворка, построенная поверх finagle., но это еще не с открытым исходным кодом, в то же время вы можете использовать Finatra.

Другие вопросы по тегам