如何将Play Framework 2.0应用程序作为Windows服务运行?

18

我有一个基于Play Framework 2.0的应用程序,想在Windows Server 2008 R2上部署(生产环境)。如何将其作为服务运行?

5个回答

44

以下方法适用于 Windows 7:

  1. 创建 C:\my_app 文件夹。
  2. 在命令行中转到您的 Play! 应用程序文件夹,然后输入

    play dist

  3. 将生成的“something-SNAPSHOT”文件夹复制到 C:\my_app。
  4. 下载YAJSW并提取到 C:\my_app 中。
  5. 在 C:\my_app\something-SNAPSHOT\ 中新建一个 start.bat 文件,并填写如下命令:

    java -cp "C:\my_app\something-SNAPSHOT\lib\*" play.core.server.NettyServer

  6. 保存文件并启动 start.bat。您的 Play 应用程序必须像往常一样启动并运行。查看服务器 PID,您将在下一步中使用它。

  7. 现在,在命令提示符中转到 C:\my_app\yajsw\bat 并键入

    genConfig.bat <前面步骤获得的PID>

  8. 您会生成 C:\my_app\yajsw\conf\wrapper.conf 文件。编辑此文件并更改以下参数:

    wrapper.ntservice.name=My App Name
    wrapper.ntservice.displayname=My App Name


    保存文件。

  9. 终止您在第6步中启动的 start.bat 脚本,然后在 C:\my_app\yajsw\bat 中运行

    runConsole.bat

    如果应用程序启动,请按Ctrl+c(并回答 y)以终止批处理文件并继续下一步。

  10. 要安装服务,启动 (用管理员身份运行)

    installService.bat

  11. 要启动服务,启动

    startService.bat

现在您可以在 Windows 服务中看到您的 "My App Name" 服务。

停止服务可以使用stopService.bat。要卸载它,请使用uninstallService.bat

6
清晰的信息,喜欢它。另外,我建议将RUNNING_PID文件重命名为其他名称,以防止在突然的服务器重启后出现启动问题(更多信息请参见此答案)。 - biesior

3

1
如果在第5步中出现以下类似错误:

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脚本。否则会导致我在此处发布的问题:

如何在将 Play Framework 2.0 应用程序部署为 Windows 服务时修复服务器 Oops 错误?

最后,请确保以管理员身份运行DOS命令窗口。在我部署时,如果没有管理员权限,我无法运行installService.bat脚本。

0

0

我们在这里列出的其他答案中遇到了start.bat方法的困难。两个主要问题是当服务器决定在补丁星期二重新启动时缺乏引导,以及需要使用VBS和其他装饰来防止需要保持命令窗口打开以保持JVM活动。

我们已经成功地使用Commons Daemon在Windows上生产运行Play应用程序。

我们使用dist将应用程序打包进行分发,然后使用Commons Daemon作为Windows服务进行安装。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接