唐突に謎の腹痛に見舞われてまさかの初シーズン下痢引退という憂き目に遭った我がスノーボードライフ、これがまさにウンの尽きとかうまいことを言ってはみたものの、みんなは一緒に雪山でぼくはひとり部屋の中、なんだか「下痢をしてもひとり」みたいな感じでやさぐれてきたので、現時点で play! を GAE/J で動作させる方法をまとめてみました。
失敗編
まずは 公式のドキュメント を参考にやってみます。GAE SDK 1.3.1 と Play 1.0-947 で確認した、とありますが全力で無視して全て最新版で突入。
GAE/J 上にアプリケーションを作成したら、早速始めてみましょう。以下では GAE/J アプリケーション、play! アプリケーション共に playongae という名前にします。適宜読み替えてください。
ちなみに我が家の Windows XP には play も GAE も複数バージョンが混在しているので、これらのコマンドはフルパスで実行します。
D:\work>c:\play-1.0.2.1\play new playongae ~ _ _ ~ _ __ | | __ _ _ _| | ~ | '_ \| |/ _' | || |_| ~ | __/|_|\____|\__ (_) ~ |_| |__/ ~ ~ play! 1.0.2.1, http://www.playframework.org ~ ~ The new application will be created in D:\work\playongae ~ What is the application name? playongae ~ ~ OK, the application is created. ~ Start it with : play run playongae ~ Have fun! ~
gae モジュールを使うよう application.conf を編集します。
module.gae=${play.path}/modules/gae
で、play run を実行。
D:\work>c:\play-1.0.2.1\play run playongae (snip) ~ ~ Oops, ~ Module not found: c:\play-1.0.2.1\modules\gae ~ ~ You can try to install the missing module using 'play install gae' ~
Oops じゃねえよと毒づきながら play install gae を実行。
D:\work>c:\play-1.0.2.1\play install gae (snip) ~ ~ Will install gae-1.0.2 ~ This module is compatible with: Tested with GAE SDK 1.3.1 and Play 1.0-947 ~ Do you want to install this version (y/n)? y ~ Installing module gae-1.0.2... ~ ~ Fetching http://www.playframework.org/modules/gae-1.0.2.zip ~ [--------------------------100%-------------------------] 3440.4 KiB/s ~ Unzipping... ~ ~ Module gae-1.0.2 is installed! ~ You can now use it by add adding this line to application.conf file: ~ ~ module.gae=${play.path}/modules/gae-1.0.2 ~
インストールパスが先ほど application.conf に指定したものと違うのでこれを修正。
module.gae=${play.path}/modules/gae-1.0.2
もう一度 play run を実行。
D:\work>c:\play-1.0.2.1\play run playongae (snip) ~ ~ Ctrl+C to stop ~ Listening for transport dt_socket at address: 8000 17:30:24,127 INFO ~ Starting D:\work\playongae 17:30:24,157 INFO ~ Module gae is available (C:\play-1.0.2.1\modules\gae-1.0.2) 17:30:26,811 WARN ~ 17:30:26,811 WARN ~ Google App Engine module 17:30:26,811 WARN ~ ~~~~~~~~~~~~~~~~~~~~~~~ 17:30:26,821 WARN ~ No Google App Engine environment found. Setting up a development environement 17:30:26,961 WARN ~ Don't forget to define your GAE application id in the 'war/WEB-INF/appengine-web.xml' file 17:30:26,971 WARN ~ 17:30:26,971 WARN ~ You're running Play! in DEV mode 17:30:28,503 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ... 17:30:44,837 INFO ~ Application 'playongae' is now started !
playongae/war/WEB-INF/appengine-web.xml が作成されるので、application の名前を指定する。ふつうは GAE/J アプリケーションと play! アプリケーションの名前は同じにすると思うので、デフォルトで設定してくれても良さそうなものですが、まあ文句言う暇があるならパッチを書けって話ですね、はい。
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>playongae</application> <version>1</version> </appengine-web-app>
で、GAE SDK 1.3.3 を指定して play gae:deploy を実行。
D:\work\playongae>c:\play-1.0.2.1\play gae:deploy --gae c:\appengine-java-sdk-1.3.3\ (snip) ~ ~ ~ Compiling ~ --------- 17:35:48,533 INFO ~ Starting D:\work\playongae 17:35:48,544 INFO ~ Module gae is available (C:\play-1.0.2.1\modules\gae-1.0.2) 17:35:50,797 WARN ~ 17:35:50,797 WARN ~ Google App Engine module 17:35:50,797 WARN ~ ~~~~~~~~~~~~~~~~~~~~~~~ 17:35:50,807 WARN ~ No Google App Engine environment found. Setting up a development environement 17:35:50,887 WARN ~ 17:35:50,887 INFO ~ Precompiling ... 17:36:02,293 INFO ~ Done. ~ ~ Packaging ~ --------- ~ Packaging current version of the framework and the application to c:\docume~1\xxx\locals~1\temp\pl ayongae.war ... ~ ~ Deploying ~ --------- ~ ~ Done! ~
Done! と表示されますが、実際には appcfg.sh が関連付けされたエディタで開かれるだけで、アプリケーションはデプロイされません。これは バグレポートに上がっている事象 で、やはり最新版ではまだ無理と言うことが分かりました。
苦悩編
play! を GAE/J で動作させるには
- play! のバージョン
- gae モジュールのバージョン
- GAE SDK のバージョン
が関係してくるようなのですが、play! は 1.0, 1.0.1, 1.0.2, 1.0.2.1 があって gae は 1.0, 1.0.1, 1.0.2 があって GAE SDK に至っては 1.3 系だけでも 1.3.0, 1.3.1, 1.3.2, 1.3.3, 1.3.3.1 があるので、これら全部の組み合わせっつったらいくつ? 4 * 3 * 5 = 60 通り?当たってる?違ってる?バカ!もう知らない!みたいな感じで頭痛がしそうになるも腹痛に打ち消されて、トイレとパソコン部屋を行ったり来たりしている間に
- play! 1.0.1
- gae 1.0.1
- GAE SDK 1.3.2
の組み合わせで正常に動作することを確認しました。
成功編
というわけで、今度は gae 1.0.1 のドキュメント を参考にやってみます。
まずは play 1.0.1 で playongae を new します。
D:\work>c:\play-1.0.1\play new playongae ~ _ _ ~ _ __ | | __ _ _ _| | ~ | '_ \| |/ _' | || |_| ~ | __/|_|\____|\__ (_) ~ |_| |__/ ~ ~ play! 1.0.1, http://www.playframework.org ~ ~ The new application will be created in D:\work\playongae ~ What is the application name? playongae ~ ~ OK, the application is created. ~ Start it with : play run playongae ~ Have fun! ~
gae モジュールを使うよう application.conf を編集。play 1.0.1 には gae 1.0.1 が "gae" という名前で同梱されています。
module.gae=${play.path}/modules/gae
play run して appengine-web.xml を作る。
D:\work>c:\play-1.0.1\play run playongae (snip) ~ ~ Ctrl+C to stop ~ Listening for transport dt_socket at address: 8000 11:42:32,794 INFO ~ Starting D:\work\playongae 11:42:32,814 INFO ~ Module gae is available (C:\play-1.0.1\modules\gae) 11:42:35,448 WARN ~ 11:42:35,448 WARN ~ Google App Engine module 11:42:35,448 WARN ~ ~~~~~~~~~~~~~~~~~~~~~~~ 11:42:35,448 WARN ~ No Google App Engine environment found. Setting up a development environement 11:42:35,558 WARN ~ Don't forget to define your GAE application id in the 'war/WEB-INF/appengine-web.xml' file 11:42:35,568 WARN ~ 11:42:35,568 WARN ~ You're running Play! in DEV mode 11:42:37,501 INFO ~ Listening for HTTP on port 9000 (Waiting a first request to start) ...
application の名前を編集。
<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>playongae</application> <version>1</version> </appengine-web-app>
ここからが先ほどの手順とちょっと変わって、play war コマンドで playongae アプリケーションを JEE ディレクトリ構成に沿った web アプリケーションとして吐き出します。
D:\work>c:\play-1.0.1\play war playongae -o playongae.war (snip) ~ ~ Packaging current version of the framework and the application to D:\work\playongae.war ... ~ Done ! ~ ~ You can now load D:\work\playongae.war as a standard WAR into your servlet container ~ You can't use play standard commands to run/stop/debug the WAR application... ~ ... just use your servlet container commands instead ~ ~ Have fun! ~
で、GAE SDK 1.3.2 の appcfg コマンドに update オプションを指定して、対象には先ほど吐き出した web アプリケーションディレクトリを渡します。
D:\work>c:\appengine-java-sdk-1.3.2\bin\appcfg.cmd update playongae.war ******************************************************** There is a new version of the SDK available. ----------- Latest SDK: Release: 1.3.3 Timestamp: Wed Apr 21 00:20:51 JST 2010 API versions: [1.0] ----------- Your SDK: Release: 1.3.2 Timestamp: Thu Mar 18 04:19:29 JST 2010 API versions: [1.0] ----------- Please visit http://code.google.com/appengine for the latest SDK. ******************************************************** Reading application configuration data... 2010/04/27 11:46:50 com.google.apphosting.utils.config.AppEngineWebXmlReader readAppEngineWebXml 情報: Successfully processed playongae.war\WEB-INF/appengine-web.xml 2010/04/27 11:46:50 com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml 情報: Successfully processed playongae.war\WEB-INF/web.xml Beginning server interaction for playongae... 0% Creating staging directory 5% Scanning for jsp files. 20% Scanning files on local disk. 25% Initiating update. 28% Cloning 118 application files. 31% Cloned 100 files. 40% Uploading 2 files. 52% Uploaded 1 files. 61% Uploaded 2 files. 68% Initializing precompilation... 90% Deploying new version. 95% Will check again in 1 seconds 98% Will check again in 2 seconds 99% Will check again in 4 seconds 99% Will check again in 8 seconds 99% Will check again in 16 seconds 99% Closing update: new version is ready to start serving. 99% Uploading index definitions. Update completed successfully. Success. Cleaning up temporary files...
ログを取り忘れたので上記には記載がありませんが、最初の一回は途中で認証用の email と password を聞かれるので GAE/J に登録したものを入力します。
おまけ
基本的にはこれで play! アプリケーションを GAE/J で動作させることができるのですが、喜び勇んで playongae.appspot.com にアクセスすると、こんな画面が表示されます。
明らかにスタイルシートが効いていません。実は指定しているスタイルシートそのものがデプロイしたアプリケーションに含まれていないので、play 本体から playongae アプリケーションにコピーしてやる必要があります。
上記コマンドで晒しているような環境の場合は、c:\play-1.0.1\modules\docviewer\public\playmanual を d:\work\playongae\public にディレクトリごとコピーしてから war 化してデプロイすれば OK です。
D:\work>xcopy c:\play-1.0.1\modules\docviewer\public\playmanual d:\work\playongae\public\playmanual\ C:\play-1.0.1\modules\docviewer\public\playmanual\manual.css 1 個のファイルをコピーしました D:\work>c:\appengine-java-sdk-1.3.2\bin\appcfg.cmd update playongae.war (snip) ~ Have fun! ~ D:\work>c:\appengine-java-sdk-1.3.2\bin\appcfg.cmd update playongae.war (snip) Update completed successfully. Success. Cleaning up temporary files...
これで playongae.appspot.com にアクセスすると
今度はちゃんとスタイルシートの効いた画面が見られます。