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 没有发现任何变化。然后我这样做了:

在一个终端会话中启动 sbt 并运行启动命令(这是启动,而不是重新启动命令)

打开另一个终端会话并使用命令 ~compile 运行 sbt。

就是这样,在两个单独的窗口中运行 SBT,使用 start 和 ~compile 命令就可以了。

显然,JRebel 必须处于活动状态并具有有效的许可证。

请记住,当源代码发生更改时,JRebel 不会重新加载绝对所有内容。特别注意缓存的值,例如缓存的路由或数据。在这种情况下,您需要编写一个简单的技巧来强制缓存重新加载,可以是基于时间的,或者只是查询文件锁,甚至是 JRebel 实际上将刷新的可重新加载类中的简单属性。

于 2013-12-28T19:53:14.177 回答