2

sbt-revolver がセットアップされ、スプレー缶で実行されていることがわかりますが、サービスにリクエストを行ったときに変更が表示されません。

ログで、jrebel が実行していることを確認できます。

    [success] Total time: 1 s, completed Feb 24, 2013 3:13:18 AM
app: [INFO] [02/24/2013 03:13:19.497] [com-example-Boot-spray.io.io-bridge-dispatcher-7] [akka://com-example-Boot/user/io-bridge] akka://com-example-Boot/user/io-bridge started
app: [INFO] [02/24/2013 03:13:19.851] [com-example-Boot-akka.actor.default-dispatcher-2] [akka://com-example-Boot/user/http-server] akka://com-example-Boot/user/http-server started on localhost/127.0.0.1:9000
>                 ~products
[success] Total time: 0 s, completed Feb 24, 2013 3:13:23 AM
1. Waiting for source changes... (press enter to interrupt)
[info] Compiling 1 Scala source to /Users/tripled153/Development/src/Foundationv2/spray-template/target/scala-2.10/classes...
[success] Total time: 2 s, completed Feb 24, 2013 3:13:33 AM
2. Waiting for source changes... (press enter to interrupt)

しかし、私の特性のメッセージを変更しても、更新時に表示されません。

package com.example

import akka.actor.Actor
import spray.routing._
import spray.http._
import MediaTypes._


// we don't implement our route structure directly in the service actor because
// we want to be able to test it independently, without having to spin up an actor
class MyServiceActor extends Actor with MyService {

  // the HttpService trait defines only one abstract member, which
  // connects the services environment to the enclosing actor or test
  def actorRefFactory = context

  // this actor only runs our route, but you could add
  // other things here, like request stream processing
  // or timeout handling
  def receive = runRoute(myRoute)
}


// this trait defines our service behavior independently from the service actor
trait MyService extends HttpService {

  val myRoute =
    path("") {
      get {
        respondWithMediaType(`text/html`) { // XML is marshalled to `text/xml` by default, so we simply override here
          complete {
            <html>
              <body>
                <h1>Say hello to <i>spray-routing</i> on <i>spray-can</i>!</h1>
              </body>
            </html>
          }
        }
      }
    }

}

これは、リボルバーが設定されたスプレー缶の例に基づいています。 https://github.com/spray/spray-template

4

3 に答える 3

2

問題は、ルートがサービスの開始時に一度だけ構築されることです。dynamicリクエストごとに再構築するディレクティブで完全なルートをラップしてみてください。

編集: このトピックに関するこのメーリング リストのスレッドを参照してください。

于 2013-02-24T08:58:27.143 に答える
1

絶対パスJREBEL_PATHのコピーに設定したことを確認してください。jrebel.jar

于 2013-07-15T09:07:08.217 に答える
0

私は再起動コマンドを使用していましたが、JRebel は変更をキャッチしていませんでした。それから私はこれをしました:

1 つのターミナル セッションで sbt を起動し、start コマンドを実行します (これは start コマンドであり、re-start コマンドではありません)。

別のターミナル セッションを開き、コマンド ~compile で sbt を実行します。

それだけです。start コマンドと ~compile コマンドを使用して 2 つの別々のウィンドウで SBT を実行すると、うまくいきます。

明らかに、JRebel はアクティブで、有効なライセンスを持っている必要があります。

ソースコードが変更された場合、JRebel はすべてを完全にリロードしないことに注意してください。キャッシュされたルートやデータなどのキャッシュされた値には特に注意してください。その場合、キャッシュのリロードを強制する簡単なトリックをコーディングする必要があります。これは、時間ベースにするか、単にファイル ロックをクエリするか、JRebel が実際にリフレッシュするリロード可能なクラスの単純なプロパティをクエリするだけです。

于 2013-12-28T19:53:14.177 に答える