2016-07-22 72 views
2

简而言之:有没有可能用阿卡-HTTP重载静态资源?静态资源重装阿卡-HTTP

多一点:

  • 我有斯卡拉项目。
  • 我使用App对象发动我的Main 类。
  • 我使用getFromResourceDirectory找到我的资源 文件夹。

我想要的是在开发过程中热插拔我的静态资源。 例如,我有index.htmlapplication.js,这是我改变,我希望看到的变化我刷新我的浏览器,无需重新启动我的服务器后。做这种事情的最佳做法是什么?

我知道,Play!允许,但不希望我的项目基于Play!仅基于此。

+0

看看SBT-左轮手枪插件 – kardapoltsev

回答

2

两个选项:

  1. 最简单的:在本地运行时使用getFromDirectory指令来代替,而它指向哪里你希望你的文件的路径为“hotload”是,它直接为他们的文件系统,所以每次更改文件并通过Akka HTTP加载时,它都将是最新版本。
  2. getFromResourceDirectory负载从classpath文件中,资源是可用的,因为每次你建立(copyResources)时间SBT把它们拷贝到target下的类目录。您可以使用unmanagedClasspath配置sbt,使其包含类路径中的静态资源目录。如果你想运行package时打包资源神器然而这将需要一些更多的SBT-trixery(如果你只是把src/resourcesunmanagedClasspath这将取决于classpath中排序如果使用复制的那些或修改后的)。
+0

哇,这是很容易.. :)我用的是“getFromResourceDirectory”。谢谢! – psisoyev

1

以下代码尝试在目录“staticContentDir”中找到该文件。如果找到该文件,则将其发送回客户端。如果找不到,它会尝试从类路径中的目录“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") 
     } 
     } 
    } 
    } 

我希望这是显而易见的。