2016-07-22 13 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が(copyResources)をビルドするたびにクラスディレクトリにそれらをコピーしてtargetにコピーするためです。 unmanagedClasspathを使用してsbtを設定すると、静的リソースディレクトリをクラスパスに含めることができます。 packageを実行しているときにアーティファクト内のリソースをパッケージ化したい場合は、unmanagedClasspathsrc/resourcesを入れるだけで、コピーされたものや変更されたものが使用されている場合はクラスパスの順序に依存します。
+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") 
     } 
     } 
    } 
    } 

から来ています。

関連する問題