我遇到的问题是,当我在开发人员模式下在我的服务器上启动播放框架服务器时,我无法指定服务器应该监听的HTTP端口。 当我尝试以下命令时,始终忽略HTTP-Address:
./play "run -Dhttp.address=192.168.1.1 -Dhttp.port=8080"
端口设置正确但不是地址,因为在此输出中可以看到:
当我使用start
在生产模式下运行服务器时,地址设置正确且一切正常。但是出于开发目的,我想重新加载并编译所有文件,只要它们被更改,所以我总是可以使用最新的代码。
我已经尝试了很多可能性但到目前为止无法解决问题。希望有人能给我一些如何解决这个问题的提示。在此先感谢您的支持。
答案 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解决方案修改网络设置,以使用不同的接口作为默认地址。