このマニュアルは現在作成中で、未完成です。
改善にご協力いただければ幸いです。ご協力いただける場合は、READMEをご覧ください。

24 Herokuへのデプロイ

Heroku は、スケーラブルな多言語クラウドアプリケーションプラットフォームです。好みの言語でアプリケーションを作成することに集中し、サーバー、ロードバランシング、ログの集約などを手動で管理することなく、クラウドに簡単にデプロイできます。 Herokuは、JVMアプリケーションの一般的なサポート以外に、特別なRatpackサポートを必要としません。Herokuは、Postgres、Redis、Memcache、RabbitMQ、New Relicなどの多くの要素を備えた豊富なプラットフォームです。Ratpackアプリケーションを提供するための魅力的なオプションです。

Herokuへのデプロイは、通常、ソース形式で行われます。デプロイは、CIパイプラインの最後にGitプッシュを実行するのと同じくらい簡単です。drone.ioTravis-CI(その他多数)など、多くの一般的なクラウドCIツールは、Herokuへのプッシュを便利にサポートしています。

Herokuを初めて使用する場合は、HerokuクイックスタートBuildpackのドキュメントを読むことをお勧めします。この章の残りの部分では、RatpackアプリケーションをHerokuにデプロイするための要件と必要な設定について概説します。

1.24 Gradleベースのビルド

Ratpackアプリケーションは、どのビルドシステムでもビルドできますが、RatpackチームはGradleを推奨しています。Herokuは、Gradleビルドパックを介してGradleをネイティブにサポートしており、Ratpack Gradleプラグインでうまく機能します。

すべてのGradleプロジェクトでは、Gradleラッパーを使用する必要があります。ラッパースクリプトがプロジェクトに存在する場合、HerokuはプロジェクトがGradleでビルドされていることを検出します。

1.1.24 ビルド

Gradleビルドパックは、Ratpackが使用されていることを検出すると、デフォルトで./gradlew installDist -x testを呼び出します。 installDistタスクはRatpack Gradleプラグインによって追加され(Gradle 2.3より前はinstallApp)、デフォルトで機能するはずです。これにより、アプリケーションがビルドされ、build/install/«プロジェクト名»ディレクトリにインストールされます。

別のタスクを実行する必要がある場合は、build.gradlestageタスクを追加できます。典型的な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を作成し、Herokuがアプリケーションの起動に使用するコマンドをweb:というプレフィックスで指定することで、このコマンドをカスタマイズできます。

3.1.24 設定

Herokuにデプロイされたアプリケーションの環境を設定するには、いくつかの方法があります。これらのメカニズムを使用して、環境変数またはJVMシステムプロパティを設定してアプリケーションを設定できます。

ratpackおよびratpack-groovy Gradleプラグインを使用する場合に使用されるアプリケーションエントリポイントは、JVMシステムプロパティを使用してServerConfigに貢献することをサポートしています(詳細については、起動の章を参照してください)。Ratpack Gradleプラグインによって作成されたスタータースクリプトは、標準のJAVA_OPTS環境変数とアプリ固有の«PROJECT_NAME»_OPTS環境変数をサポートしています。アプリケーション名がfoo-Barの場合、環境変数名はFOO_BAR_OPTSになります。

これらすべてをまとめる1つの方法は、envを介してアプリケーションを起動することです

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

Herokuはこれをプラットフォームの有用なデフォルトに設定するため、一般にJAVA_OPTSを使用しない方が望ましいです。

もう1つのアプローチは、設定変数を使用することです。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アプリケーションをビルドしたり、バイナリ形式でデプロイしたりすることは可能です。

コンパイルされたRatpackアプリケーションがHeroku環境にある場合(別のビルドツールでビルドするか、バイナリデプロイメントによって)、javaを直接使用してアプリケーションを起動するだけです。

web: java ratpack.groovy.GroovyRatpackMain

Ratpackアプリケーションの起動の詳細については、起動の章を参照してください。

3.24 一般的な考慮事項

1.3.24 ポート

Herokuは、各アプリケーションに一時的なポート番号を割り当て、PORT環境変数によって使用できるようにします。 ratpack.portシステムプロパティが設定されていない場合、Ratpackはデフォルトでこの環境変数を尊重します。