如何部署 Scala 应用程序到 CloudFoundry 平台?
Buildpack for Scala
可以使用 Heroku Buildpack for Scala 作为自定义的 Buildpack 来发布 Scala 应用程序
---
applications:
- name: play-scala-starter
  memory: 512M
  instances: 1
  host: play-scala-starter
  path: .
  buildpack: https://github.com/heroku/heroku-buildpack-scala.git
How It Works
The buildpack will detect your app as Scala if it has
- /*.sbt
- /project/*.scala
- /project/build.properties
- /.sbt/*.scala
. It vendors a version of sbt into your slug (if you are not using sbt-native-packager, it also includes your popluated .ivy/cache in the slug). The .ivy2 directory will be cached between builds to allow for faster build times.
It is strongly recommended that you use sbt-native-packager with this buildpack instead of sbt-start-script. The latter is deprecated, and will result in exessively large slug sizes.
Build behavior
Applications must include a /project/build.properties file with the sbt.version property specifying a version of SBT between 0.11.0 and 1.x. SBT release candidates, betas and other pre-release versions are allowed.
The Heroku Scala buildpack will run sbt compile stage to build the application. Applications must include a stage task, which performs any tasks needed to prepare an application to be run in-place. For example, Typesafe’s sbt-native-packager adds a stage task to SBT that generates start scripts for an application. To use the plugin, create a /project/plugins.sbt file containing:
addSbtPlugin("com.typesafe.sbt" % "sbt-native-packager" % "1.3.4")
Or you can write a custom stage task by putting something like this in your build.sbt:
val stage = taskKey[Unit]("Stage task")
val Stage = config("stage")
stage := {
  (packageWar in Compile).value
  (update in Stage).value.allFiles.foreach { f =>
    if (f.getName.matches("webapp-runner-[0-9\\.]+.jar")) {
      println("copying " + f.getName)
      IO.copyFile(f, baseDirectory.value / "target" / "webapp-runner.jar")
    }
  }
}
You can test your task by running sbt compile stage locally.
Runtime behavior
By default, Scala applications are launched with a start script generated by the sbt-native-packager:
web: target/universal/stage/bin/appname
If an application is not using the sbt-native-packager or should be launched in a different way, a custom Procfile can be included in the root of the project specifying a different entry for the web process.
The Play framework automatically generates a start script for you, so no additional plugins are needed.
Java Buildpack
如果你打算使用纯的 Java Buildpack 的话,可以做以下步骤
- Add the sbt-native-packager to your project
- Execute the action universal:packageBinbuilding by hand or configure your build server to do so
- 
    Change the buildpack in the manifest.ymland add some parameters, if necessary. Configure the path of the artifact to deploy--- applications: - name: play-scala-starter memory: 1024M instances: 1 host: play-scala-starter path: target/universal/play-scala-starter-example-1.0-SNAPSHOT.zip buildpack: https://github.com/cloudfoundry/java-buildpack.git
- Run cf pushor let the build server do so.
Comments