【问题标题】:Static resource reload with akka-http使用 akka-http 重新加载静态资源
【发布时间】:2016-11-26 05:49:08
【问题描述】:

简而言之:是否可以使用 akka-http 重新加载静态资源?

还有一点:

  • 我有 Scala 项目。
  • 我正在使用App 对象来启动我的Main 班级。
  • 我正在使用getFromResourceDirectory 来定位我的资源 文件夹。

我想要的是在开发过程中热交换我的静态资源。 例如,我有 index.htmlapplication.js,我对其进行了更改,并且我希望在刷新浏览器而不重新启动服务器后查看更改。做这种事情的最佳做法是什么?

我知道Play! 允许这样做,但我不想仅仅因为这个而将我的项目基于Play!

【问题讨论】:

  • 看看 sbt-revolver 插件

标签: scala akka akka-http hotswap


【解决方案1】:

两种选择:

  1. 最简单:在本地运行时使用getFromDirectory 指令,并将其指向您要“热加载”的文件所在的路径,它直接从文件系统提供它们,因此每次更改文件并加载它通过 Akka HTTP 将是最新版本。
  2. getFromResourceDirectory 从类路径加载文件,资源可用,因为 SBT 每次构建时都会将它们复制到 target 下的类目录中(copyResources)。您可以使用unmanagedClasspath 配置 sbt 以使其在类路径中包含静态资源目录。如果您想在运行 package 时将资源打包到工件中,但是这将需要更多的 sbt-trixery(如果您只是将 src/resources 放入 unmanagedClasspath 它将取决于类路径排序是复制的还是修改的被使用)。

【讨论】:

  • 哇,这太容易了.. :) 我使用的是“getFromResourceDirectory”。谢谢!
【解决方案2】:

我无法通过添加到 unmanagedClasspath 来让它工作,所以我改用 getFromDirectory。如果 getFromResourceDirectory 像这样失败,您可以使用 getFromDirectory 作为后备。

val route =
  pathSingleSlash {
    getFromResource("static/index.html") ~
    getFromFile("../website/static/index.html")
  } ~
  getFromResourceDirectory("static") ~
  getFromDirectory("../website/static")

首先它尝试在静态资源目录中查找文件,如果失败,然后检查 ../website/static 是否有该文件。

【讨论】:

    【解决方案3】:

    以下代码尝试在“staticContentDir”目录中查找文件。如果找到该文件,则将其发送回客户端。如果找不到,它会尝试从类路径中的目录“site”中获取文件。 用户网址是:http://server:port/site/path/to/file.ext

    /site/ 来自“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")
            }
          }
        }
      }
    

    我希望它很清楚。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-15
      • 2020-01-18
      • 1970-01-01
      • 2015-03-08
      • 2015-02-02
      相关资源
      最近更新 更多