2016-07-22 6 views
2

요약 : akka-http를 사용하여 정적 리소스를 다시로드 할 수 있습니까?akka-http로 정적 리소스를 다시로드

좀 더 :

  • 내가 스칼라 프로젝트가 있습니다.
  • 클래스를 실행하려면 App 개체를 사용하고 있습니다.
  • 내 리소스 폴더를 찾으려면 getFromResourceDirectory을 사용하고 있습니다.

내가 원하는 것은 개발 중에 정적 리소스를 핫 스왑하는 것입니다. 예를 들어 index.html 또는 application.js이 있는데 변경되었으므로 서버를 다시 시작하지 않고 브라우저를 새로 고친 후 변경 사항을보고 싶습니다. 그런 일을하는 가장 좋은 방법은 무엇입니까?

나는 Play!이 그것을 허용하지만, 그 때문에 Play!에 내 프로젝트의 기반을두고 싶지 않다는 것을 알고있다.

+0

sbt-revolver 플러그인을보세요 – kardapoltsev

답변

2

두 가지 옵션 :

  1. 가장 쉬운 : 그래서, 'hotload가', 그것은 파일 시스템에서 직접 서비스를 제공하는 로컬로 실행 할 때 대신 getFromDirectory 지시어를 사용하여 파일을 원하는 경로를 가리 파일을 변경하고 Akka HTTP를 통해로드 할 때마다 최신 버전이됩니다.
  2. getFromResourceDirectory은 클래스 경로에서 파일을로드합니다. SBT는 (copyResources)을 빌드 할 때마다 SBT가 클래스 디렉토리에 파일을 복사하기 때문에 target에 복사하기 때문에 리소스를 사용할 수 있습니다. unmanagedClasspath을 사용하여 sbt를 구성하여 클래스 경로에 정적 자원 디렉토리를 포함시킬 수 있습니다. 그러나 package을 실행할 때 이슈에 리소스를 패키징하고 싶다면 unmanagedClasspathsrc/resources을 넣으면 복사 된 것 또는 수정 된 것들이 사용되는 경우 클래스 경로 순서에 따라 달라집니다.
+0

와우, 너무 쉬웠습니다 .. :) 'getFromResourceDirectory'를 사용하고있었습니다. 감사! – psisoyev

1

아래 코드는 "staticContentDir"디렉토리에서 파일을 찾으려고 시도합니다. 파일을 찾으면 클라이언트로 다시 보냅니다. 찾지 못하면 classpath에있는 "site"디렉토리에서 파일을 가져 와서 시도합니다. 사용자 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") 
     } 
     } 
    } 
    } 

에서 온다.