将 Scala PlayFramework 项目部署到 IBM Bluemix

Deploy Scala PlayFramework Project to IBM Bluemix

我已经使用 Play 2.4 Scala2.11 构建了一个 RESTFul 服务,现在我想将它部署到 IBM Bluemix。

play2-war-plugin 用于将项目打包为 war 包,因为 Bluemix 使用 Liberty 作为容器。

但是当我将 war 包推送到 Bluemix 时,我收到了错误日志:

[ERROR ] SRVE0918E: The attempted blocking write is not allowed because the non-blocking I/O has already been started by the application registering the WriteListener [play.core.server.servlet31.Play2Servlet31RequestHandler$ResultWriteListener@d2487ee8].

我想知道:

您无需将 Play Framework 应用程序打包到 war 文件中即可将其部署到 Bluemix。

只需使用 play distactivator dist 构建您的应用程序,然后使用 java_buildpack 进行部署。例如:

$ cf push play-application -p target/universal/play-application-1.0-SNAPSHOT.zip -b java_buildpack

您可以在此处查看 Java Play Framework 的 buildpack 文档:

https://github.com/cloudfoundry/java-buildpack/blob/master/docs/example-play_framework.md

仅供现在访问此页面的人(如我)使用。 Alex de Silva 的回答很好,但需要更新:

  1. 使用sbt代替命令playactivatorhere描述了sbt distsbt stage命令。如果您使用 play,它根本不会工作,而在 activator 的情况下——它已经过时了——它会失败并出现一些 "can't find dependency" 错误。确保安装了最新版本的 sbt
  2. 相同的说明适用于任何 基于 sbt 的 Scala 应用程序,而不仅仅是 Play Framework。您只需要确保在您的 sbt 构建中正确设置了 sbt-native-packager 插件。