我有一个基于Play Framework 2.0的应用程序,想在Windows Server 2008 R2上部署(生产环境)。如何将其作为服务运行?
我有一个基于Play Framework 2.0的应用程序,想在Windows Server 2008 R2上部署(生产环境)。如何将其作为服务运行?
以下方法适用于 Windows 7:
在命令行中转到您的 Play! 应用程序文件夹,然后输入
play dist
在 C:\my_app\something-SNAPSHOT\ 中新建一个 start.bat 文件,并填写如下命令:
java -cp "C:\my_app\something-SNAPSHOT\lib\*" play.core.server.NettyServer
保存文件并启动 start.bat。您的 Play 应用程序必须像往常一样启动并运行。查看服务器 PID,您将在下一步中使用它。
现在,在命令提示符中转到 C:\my_app\yajsw\bat 并键入
genConfig.bat <前面步骤获得的PID>
您会生成 C:\my_app\yajsw\conf\wrapper.conf 文件。编辑此文件并更改以下参数:
wrapper.ntservice.name=My App Name
wrapper.ntservice.displayname=My App Name
保存文件。
终止您在第6步中启动的 start.bat 脚本,然后在 C:\my_app\yajsw\bat 中运行
runConsole.bat
如果应用程序启动,请按Ctrl+c
(并回答 y)以终止批处理文件并继续下一步。
要安装服务,启动 (用管理员身份运行)
installService.bat
要启动服务,启动
startService.bat
现在您可以在 Windows 服务中看到您的 "My App Name" 服务。
停止服务可以使用stopService.bat
。要卸载它,请使用uninstallService.bat
。Play服务器进程ID为1132
[info] play - 数据库[default]已连接到jdbc:h2:file:db/h2/play
[warn] play - 您的生产数据库[default]需要演化!
... 在控制台中有一堆 SQL 语句 ...
[warn] play - 如果您想自动运行它们,请使用 -DapplyEvolutions.default=true 运行(请小心)
糟糕,无法启动服务器。
@6gme0o9k5:数据库“default”需要演化!
然后改为这样运行命令:
java -cp "C:\my_app\something-SNAPSHOT\lib\*" -DapplyEvolutions.default=true play.core.server.NettyServer
在 Mikhail 描述的过程中,还有两个额外的事项让我困扰:
首先,在第9步之前,确保终止第6步中启动的start.bat脚本。否则会导致我在此处发布的问题:
最后,请确保以管理员身份运行DOS命令窗口。在我部署时,如果没有管理员权限,我无法运行installService.bat脚本。对于新版本的Play,你可以使用sbt-native-packager
,它几乎自动地准备了安装程序和服务。
http://www.scala-sbt.org/sbt-native-packager/formats/windows.html
我们在这里列出的其他答案中遇到了start.bat
方法的困难。两个主要问题是当服务器决定在补丁星期二重新启动时缺乏引导,以及需要使用VBS和其他装饰来防止需要保持命令窗口打开以保持JVM活动。
我们已经成功地使用Commons Daemon在Windows上生产运行Play应用程序。
我们使用dist
将应用程序打包进行分发,然后使用Commons Daemon作为Windows服务进行安装。
RUNNING_PID
文件重命名为其他名称,以防止在突然的服务器重启后出现启动问题(更多信息请参见此答案)。 - biesior