运行忽略参数-Dhttp.address = ****

时间:2015-07-03 14:29:54

标签: playframework playframework-2.2

我遇到的问题是,当我在开发人员模式下在我的服务器上启动播放框架服务器时,我无法指定服务器应该监听的HTTP端口。 当我尝试以下命令时,始终忽略HTTP-Address:

./play "run -Dhttp.address=192.168.1.1 -Dhttp.port=8080"

端口设置正确但不是地址,因为在此输出中可以看到:

enter image description here

当我使用start在生产模式下运行服务器时,地址设置正确且一切正常。但是出于开发目的,我想重新加载并编译所有文件,只要它们被更改,所以我总是可以使用最新的代码。 我已经尝试了很多可能性但到目前为止无法解决问题。希望有人能给我一些如何解决这个问题的提示。在此先感谢您的支持。

1 个答案:

答案 0 :(得分:1)

你不会喜欢这个答案。对于Play 2.2,这正是code(在GitHub上)。

start使用端口和地址属性:

  val server = new NettyServer(
    new StaticApplication(applicationPath),
    Option(System.getProperty("http.port")).fold(Option(9000))(p => if (p == "disabled") Option.empty[Int] else Option(Integer.parseInt(p))),
    Option(System.getProperty("https.port")).map(Integer.parseInt(_)),
    Option(System.getProperty("http.address")).getOrElse("0.0.0.0")
  )

run仅使用端口属性:

  def mainDevHttpMode(sbtLink: SBTLink, sbtDocHandler: SBTDocHandler, httpPort: Int): NettyServer = {
    mainDev(sbtLink, sbtDocHandler, Some(httpPort), Option(System.getProperty("https.port")).map(Integer.parseInt(_)))
  }

  private def mainDev(sbtLink: SBTLink, sbtDocHandler: SBTDocHandler, httpPort: Option[Int], httpsPort: Option[Int]): NettyServer = {
    play.utils.Threads.withContextClassLoader(this.getClass.getClassLoader) {
      try {
        val appProvider = new ReloadableApplication(sbtLink, sbtDocHandler)
        new NettyServer(appProvider, httpPort,
          httpsPort,
          mode = Mode.Dev)
      } catch {
        case e: ExceptionInInitializerError => throw e.getCause
      }

    }
  }

然而,您可以a)使用NettyServer和您想要使用的地址致电ReloadableApplication(虽然我从未尝试过这个);或b)使用非Play解决方案修改网络设置,以使用不同的接口作为默认地址。