§Heroku へのデプロイ
Heroku はクラウド・アプリケーション・プラットフォーム - つまり web アプリケーションをビルドし、デプロイするひとつの方法です。
まず始めに以下の作業を行います。
§アプリケーションを git で保存する
$ git init
$ git add .
$ git commit -m "init"
§Heroku 上で新規アプリケーションを作成する
$ heroku create
Creating warm-frost-1289... done, stack is cedar
http://warm-1289.herokuapp.com/ | [email protected]:warm-1289.git
Git remote heroku added
これで、新しいアプリケーションが、 HTTP (と HTTPS) のエンドポイントおよび Git のエンドポイントと一緒に提供されます。 Git エンドポイントは Git リポジトリの設定に heroku
というリモートリポジトリとして登録されています。
§アプリケーションをデプロイする
Heroku にアプリケーションをデプロイするため、ローカルレポジトリを heroku
という名前のリモートレポジトリへ git push してください。
$ git push heroku master
Counting objects: 34, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (20/20), done.
Writing objects: 100% (34/34), 35.45 KiB, done.
Total 34 (delta 0), reused 0 (delta 0)
-----> Heroku receiving push
-----> Scala app detected
-----> Building app with sbt v0.11.0
-----> Running: sbt clean compile stage
...
-----> Discovering process types
Procfile declares types -> web
-----> Compiled slug size is 46.3MB
-----> Launching... done, v5
http://8044.herokuapp.com deployed to Heroku
To [email protected]:floating-lightning-8044.git
* [new branch] master -> master
git push が完了すると、 Heroku は sbt clean stage
を実行して、アプリケーションをビルドします。初回のデプロイ時には、全ての依存モジュールがダウンロードされるため、多少の時間がかかります (2 回目以降のデプロイ時はキャッシュが使われます) 。
§アプリケーションがデプロイされたことを確認する
では、デプロイしたアプリケーションの状態を確認してみましょう。
$ heroku ps
Process State Command
------------ ------------------ ----------------------
web.1 up for 10s target/universal/stage/bin/myapp
Web プロセスが起動しています。次は、詳細を確認するため、ログを見てみましょう:
$ heroku logs
2011-08-18T00:13:41+00:00 heroku[web.1]: Starting process with command `target/universal/stage/bin/myapp`
2011-08-18T00:14:18+00:00 app[web.1]: Starting on port:28328
2011-08-18T00:14:18+00:00 app[web.1]: Started.
2011-08-18T00:14:19+00:00 heroku[web.1]: State changed from starting to up
...
通常のコマンドラインで行うのと同じやり方でログを追いかけることもできます。これはデバッグに便利です:
$ heroku logs -t --app floating-lightning-8044
2011-08-18T00:13:41+00:00 heroku[web.1]: Starting process with command `target/start`
2011-08-18T00:14:18+00:00 app[web.1]: Starting on port:28328
2011-08-18T00:14:18+00:00 app[web.1]: Started.
2011-08-18T00:14:19+00:00 heroku[web.1]: State changed from starting to up
...
問題なしのようです。さらに以下のコマンドを実行すると、ブラウザが起動してデプロイした Web アプリにアクセスすることができます:
$ heroku open
§データベースに接続する
Heroku は Heroku Add-ons によって多くのリレーショナルデータベースと NoSQL データベースを提供しています。Heroku 上の Play アプリケーションには、自動的に Heroku Postgres が提供されています。この Postgres データベースを Play アプリケーションが使うように設定するには、まず PostgreSQL JDBC ドライバをアプリケーション依存性 (build.sbt
) に追加します:
libraryDependencies += "postgresql" % "postgresql" % "9.1-901-1.jdbc4"
そして、プロジェクトのルートディレクトリに Procfile
(“P” は大文字) というファイルを以下の内容で作成します (myapp
は自身のプロジェクト名に置き換えてください):
web: target/universal/stage/bin/retailos -Dhttp.port=${PORT} -DapplyEvolutions.default=true -Ddb.default.driver=org.postgresql.Driver -Ddb.default.url=${DATABASE_URL}
この設定で、 web
というプロセスでは Play を起動し applyEvolutions.default
、 db.default.driver
それと db.default.url
設定をオーバーライドするように Heroku に指示します。 Procfile
コマンドは最大で 255 文字である事に注意して下さい。代替手段として 本番向けの設定 ページに書かれている -Dconfig.resource=
および -Dconfig.file=
を使用します。
Heroku はデプロイされたアプリケーションが play アプリケーションであると断定するために conf ディレクトリの中にある application.conf ファイルを探すので、実際のところ Procfile の作成は必須でないことを覚えておいてください。
§更に進んだ学習リソース
- Java 用の Play チュートリアル
- Play, Scala, Squeryl による入門
- Play, Heroku, CloudFront によるエッジキャッシング
- データベース指向アプリケーションのための Play 最適化
- Heroku での Play Scala コンソール
- Heroku 上でスケジューリングされたジョブを持つ Play アプリケーション
- Java と Play でファイルアップロードに Amazon S3 を使う
このドキュメントの翻訳は Play チームによってメンテナンスされているものではありません。 間違いを見つけた場合、このページのソースコードを ここ で確認することができます。 ドキュメントガイドライン を読んで、お気軽にプルリクエストを送ってください。