2016-07-22 2 views
2

Вкратце: можно ли перезагрузить статические ресурсы с помощью akka-http?Перезагрузка статического ресурса с помощью akka-http

Немного больше:

  • У меня есть проект Scala.
  • Я использую объект App для запуска своего класса Main .
  • Я использую getFromResourceDirectory, чтобы найти свой ресурс .

Что бы я хотел иметь, это разобрать мои статические ресурсы во время разработки. Например, у меня есть index.html или application.js, который я изменяю, и я хочу видеть изменения после обновления браузера без перезагрузки моего сервера. Какова наилучшая практика такого поведения?

Я знаю, что Play! позволяет это, но не хочу основывать мой проект на Play! только из-за этого.

+0

Взгляните на плагин sbt-revolver – kardapoltsev

ответ

2

Два варианта:

  1. Самый простой: используйте getFromDirectory директиву вместо когда работает локально и направьте его на путь, где ваши файлы, которые вы хотите «hotload» есть, она служит их непосредственно из файловой системы, так каждый раз, когда вы меняете файл и загружаете его через Akka HTTP, это будет последняя версия.
  2. getFromResourceDirectory загружает файлы из пути к классам, ресурсы доступны, потому что SBT копирует их в каталог классов по target каждый раз при создании (copyResources). Вы можете настроить sbt с помощью unmanagedClasspath, чтобы включить в него каталог статических ресурсов в пути к классам. Если вы хотите упаковать ресурсы в артефакте при запуске package, то для этого потребуется еще несколько sbt-trixery (если вы просто поместите src/resources в unmanagedClasspath, это будет зависеть от упорядочивания пути к классам, если используются скопированные или модифицированные).
+0

Ничего себе, это было так просто .. :) Я использовал 'getFromResourceDirectory'. Благодаря! – psisoyev

1

Код, указанный ниже, пытается найти файл в каталоге "staticContentDir". Если файл найден, он отправляется обратно клиенту. Если он не найден, он пытается, извлекая файл из каталога «сайт» в пути к классам. URL-адрес пользователя является: http://server:port/site/path/to/file.ext

/сайт/происходит от "staticPath"

val staticContentDir = calculateStaticPath() 
    val staticPath = "site" 
    val routes = pathPrefix(staticPath) { 
    entity(as[HttpRequest]) { requestData => 
     val fullPath = requestData.uri.path 
     encodeResponse { 
     if (Files.exists(staticContentDir.resolve(fullPath.toString().replaceFirst(s"/$staticPath/", "")))) { 
      getFromBrowseableDirectory(staticContentDir.toString) 
     } else { 
      getFromResourceDirectory("site") 
     } 
     } 
    } 
    } 

Я надеюсь, что это понятно.

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