§アプリケーションを本番モードで起動する
Play アプリケーションを本番モードで起動する方法はいくつかあります。まずは、ローカル環境に Play をインストールするという最も簡単な方法を試してみましょう。
§start コマンドを使う
アプリケーションを本番モードで起動する最も簡単な方法は、 Play コンソールから start
コマンドを実行することです。そのためには、サーバに予め Play 2.0 をインストールしておく必要があります。
[My first application] $ start
run
コマンドは開発モードのためだけに用意されたものなので、本番環境では絶対に利用しないでください。開発モードの場合、リクエスト毎に sbt が全てのソースファイルの更新チェックを行ってしまいます。
start
コマンドを実行すると、 Play は JVM を新たにフォークして、標準の Netty HTTP サーバを起動します。そのとき、標準出力が Play コンソールにリダイレクトされるので、そこからアプリケーションの状態をモニタリングすることができます。
サーバの起動時にはサーバのプロセス ID が表示されると同時に、
RUNNING_PID
というファイルに書き込まれます。起動中の Play サーバを停止させるためには、単にそのプロセスにSIGTERM
シグナルを送信してアプリケーションを終了すればよいでしょう。
Ctrl+D
を入力すると、 Play コンソールは終了しますが、生成されたサーバ・プロセスはバックグラウンドで動作を続けます。そのとき、フォークした JVM の標準出力は閉じられてしまいますが、ログは logs/application.log
というファイルに出力され続けます。
Ctrl+C
を入力すると、Play コンソールとフォークした Play サーバの両方の JVM を終了します。
前述の方法の他に、 OS のコマンドプロンプトから play start
を直接実行しても、同じことができます。
$ play start
ノート: -Dhttp.port システム変数を渡すことで、 HTTP のポート番号を変更することができます。
§stage タスクを使う
start
コマンドの問題点は、アプリケーションを対話的に起動するため手作業が必要だということと、 プロセスを切り離すために Ctrl+D
が必要だということです。つまり、この方法はデプロイを自動化するには向いていません。
こんなとき stage
タスクを利用すると、アプリケーションが後で即座に起動できるように、準備をすることができます。プロジェクトを後で即座に実行できるようにするための典型的なコマンドは次のようなものです。
$ play clean compile stage
このコマンドにより、アプリケーションのコンパイル時に生成された一時ファイルが削除され、改めてコンパイルが実行され、必要な依存モジュールがダウンロードされ、これら全てが target/staged
ディレクトリへコピーされます。さらに、 Play サーバを起動するための target/start
というスクリプトも生成されます。
アプリケーションは次のように起動できます。
$ target/start
生成された start
スクリプトはとてもシンプルです。実際のところ、このスクリプトを使わず java
コマンドにより直接アプリケーションを起動してもいいくらいです。
もし Play がサーバにインストールされていないのであれば、同じことを行うために sbt を使ってもよいでしょう。
$ sbt clean compile stage