2016-07-22 71 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") 
     } 
     } 
    } 
    } 

我希望這是顯而易見的。