本手册仍在编写中,目前尚未完善。
如果您想帮助改进它,我们希望您能这样做,请参阅 README

24 部署到 Heroku

Heroku 是一个可扩展的多语言云应用程序平台。它允许您专注于使用您选择的语言编写应用程序,然后轻松地将它们部署到云端,而无需手动管理服务器、负载均衡、日志聚合等。Heroku 没有,也不需要在 对 JVM 应用程序的通用支持 之外进行任何特殊的 Ratpack 支持。Heroku 是一个丰富的平台,具有许多 元素,例如 Postgres、Redis、Memcache、RabbitMQ、New Relic 等。它是提供 Ratpack 应用程序的引人注目的选择。

部署到 Heroku 通常以源代码形式进行。部署就像在 CI 管道结束时执行 Git push 一样简单。许多流行的云 CI 工具,例如 drone.ioTravis-CI(以及其他工具)都对推送到 Heroku 提供方便的支持。

如果您不熟悉 Heroku,建议您阅读 Heroku 快速入门Buildpack 文档。本章的其余部分概述了将 Ratpack 应用程序部署到 Heroku 的要求和必要配置。

1.24 基于 Gradle 的构建

Ratpack 应用程序可以通过任何构建系统构建,但 Ratpack 团队推荐使用 Gradle。Heroku 通过 Gradle buildpack 对 Gradle 提供原生支持,该 buildpack 与 Ratpack Gradle 插件配合良好。

所有 Gradle 项目都应使用 Gradle Wrapper。如果包装脚本存在于您的项目中,Heroku 将检测到您的项目是用 Gradle 构建的。

1.1.24 构建

Gradle buildpack 默认情况下将在检测到使用 Ratpack 时调用 ./gradlew installDist -x testinstallDist 任务由 Ratpack Gradle 插件(在 Gradle 2.3 之前为 installApp)添加,并且默认情况下应正常工作。这将构建您的应用程序并将其安装到 build/install/«project name» 目录中。

如果您需要运行不同的任务,可以将 stage 任务添加到您的 build.gradle 中。一个典型的 stage 任务可能如下所示

task stage {
  dependsOn clean, installDist
}

如果存在 stage 任务,Heroku 将运行它而不是默认任务。

1.1.1.24 设置项目名称

默认情况下,Gradle 使用项目的目录名称作为项目的名称。在 Heroku(以及一些 CI 服务器)中,项目是在具有随机分配名称的临时目录中构建的。为了确保项目使用一致的名称,请在项目的根目录中将声明添加到 settings.gradle

rootProject.name = "«project name»"

这对于任何 Gradle 项目来说都是一个好的做法。

2.1.24 运行 (Procfile)

默认情况下,Heroku 将运行以下脚本启动您的应用程序

build/install/«project name»/bin/«project name»

您可以通过在应用程序的根目录中创建一个 Procfile 并在 web: 前缀后指定 Heroku 应用来启动您的应用程序的命令来自定义此命令。

3.1.24 配置

有几种方法可以配置部署到 Heroku 的应用程序的环境。您可能希望使用这些机制来设置环境变量和/或 JVM 系统属性以配置您的应用程序。

使用 ratpackratpack-groovy Gradle 插件时使用的应用程序入口点支持使用 JVM 系统属性来贡献到 ServerConfig(有关更多详细信息,请参见 启动章节 章节)。Ratpack Gradle 插件创建的启动脚本支持标准的 JAVA_OPTS 环境变量和一个特定于应用程序的 «PROJECT_NAME»_OPTS 环境变量。如果您的应用程序名称是 foo-Bar,则环境变量将被命名为 FOO_BAR_OPTS

将所有这些整合在一起的一种方法是通过 env 启动您的应用程序

web: env "FOO_BAR_OPTS=-Dapp.dbPassword=secret" build/install/«project name»/bin/«project name»

一般来说,最好不要使用 JAVA_OPTS,因为 Heroku 将其设置为 平台的有用默认值

另一种方法是使用 配置变量。通过 Procfile 设置环境的好处是这些信息位于您的版本控制源代码树中。使用配置变量的好处是它们仅对有权使用 Heroku 查看/更改它们的那些人可见。可以通过为应保密的值(例如密码)设置配置变量并在 Procfile 中引用它们来组合这两种方法。

web: env "FOO_BAR_OPTS=-Dapp.dbPassword=$SECRET_DB_PASSWORD" build/install/«project name»/bin/«project name»

现在可以很容易地看到源代码树中设置了哪些属性和环境变量,但敏感值只能通过 Heroku 管理工具查看。

2.24 其他构建工具和二进制部署

Ratpack 项目没有为其他构建工具提供任何“官方”集成。但是,完全可以使用您喜欢的任何工具为 Heroku 构建 Ratpack 应用程序,甚至以二进制形式部署。

在 Heroku 环境中获得编译后的 Ratpack 应用程序后(通过使用其他构建工具构建或通过二进制部署),您可以简单地通过直接使用 java 来启动应用程序。

web: java ratpack.groovy.GroovyRatpackMain

有关启动 Ratpack 应用程序的更多详细信息,请参见 启动章节

3.24 一般注意事项

1.3.24 端口

Heroku 为每个应用程序分配一个短暂的端口号,该端口号由 PORT 环境变量提供。如果未设置 ratpack.port 系统属性,Ratpack 默认情况下会遵守此环境变量。