garbagetown

個人の日記です

Play Framework 1.x の起動/停止スクリプト

この記事は Play framework 2.x Java and 1.x Advent Calendar 2013 - Adventar の十日目です。

ぼくが初日から日付をまたいだせいで あうとー 呼ばわりされたり、謎の義務感に駆られた孤高のエンジニア達がひとりで二つも三つも記事を書いたりしていますが、何とか続いているようです。

「この人たち必死過ぎwww可哀想www」と思ったら、12/17 発売予定の Play Framework 2徹底入門 を買って、空き枠に読書感想文を書いてください。

Play1 による開発と納品

本題に入る前の前置きとして、Play1 の起動/停止スクリプトが必要になった背景をお話し致します。

2013 年度上期にあるシステム開発を受注し、システム設計等を任せて頂いたので、少し迷いましたが Play Framework 1 で開発することにしました。

規模は小さめでしたが、ご多分に漏れず予算と納期は厳しく、不慣れなフレームワークを導入したことによって失敗するリスクはもちろんありました。しかし、昨今の業界動向から察するに、このまま ステートフルかつページ指向な Struts 系のフレームワークを使い続けるリスクの方が高いと判断し、提案しました。

このあたりは機会があればどこかでお話ししたいと思いますが、まずは下記リンクなどに目を通して頂ければと思います。

すぐに session.setAttribute/getAttribute としてしまうステートフル脳から Ruby on Rails 以降のステートレス脳に切り替えるのは、それなりにコストが掛かります。そもそもステートレスアーキテクチャを理解していないプログラマも SI 業界にはごろごろいますので、致命傷にならないうちに対策を打たれることをおすすめします。

Play1 起動/停止スクリプト

いろいろと紆余曲折はありましたが、なんとか納品することができたので、本番システムの起動と同時に Play1 アプリケーションを立ち上げるスクリプトを用意しました。

同じ内容の記事がすでに クラスメソッド株式会社様の開発者ブログ にて公開されているのですが、リンク先が本家サイトのデザイン変更で壊れてしまっていたので、ここで改めて紹介させて頂こうと思います。

今回は init.d script to launch Play framework under CentOS/RedHat をそのまま使いました。

はてなブログは gist 記法が使えるので便利ですね。

Ubuntsu 系は init.d script to launch Play framework under Ubuntu が参考になると思います。

パーミッションの設定等については、上記クラスメソッド株式会社様の開発者ブログを参考にしてください。

注意点

基本的に問題なく使うことができましたが、一点だけ注意が必要です。

Play1 のスクリプトpython で書かれており、ここから java のプロセスを立ち上げる仕組みになっていますが、上記の起動スクリプトpython の実行結果のみで成功/失敗を判断しています。このため、立ち上がった java プロセス内で何らかのエラー(もっとも多いのは、前回立ち上げた Play1 プロセスが正常にシャットダウンされておらず、9000 番ポートの取得に失敗する)が発生しても、起動スクリプトは正常終了を返してしまいます。

ログファイルをポーリングしてアプリケーション正常起動メッセージが出力されることを確認してから正常終了を返すよう、起動スクリプトを改善したほうがよいかもしれません。

まとめ

みんなでストラッツやめましょう。次は @yuba さん(二回目)です!