GAE/JにGrailsアプリをデプロイしてみた

イヤ,ホントはデプロイしただけでアプリは作ってない。ただWindowsファイアウォール内でデプロイしてみたんで,一応手順を残す。
#もっと実用的なお話はこちらを参照したようがいいよっ。
#→ Grails on GAE/Jを試してみた - uehaj's blog


■実行環境

JDK1.5.0_17, Grails1.1.1-SNAPSHOT, GAE/J SDK 1.2.0

Grails1.1.1-SNAPSHOTは,ここから,"download"->zipを取得して解凍(仮にそれを c:\tmp\grails-grails とする)。以下の手順でビルドする。
#ANT_OPTSは各々の環境に合わせてね。

> cd c:\tmp\grails-grails
> set ANT_OPTS=-Xmx512m -DproxyPort=nnnn -DproxyHost=proxy.example.com
> ant package

distディレクトリに "grails-bin-1.1.1-SNAPSHOT.zip" が出来上がるので,それを利用する。


■設定済みの環境変数

JAVA_OPTS -Dhttp.proxyPort=nnnn -Dhttp.proxyHost=proxy.example.com
GRAILS_HOME <- Grails1.1.1-SNAPSHOTの場所
APPENGINE_HOME <- GAE/J SDK 1.2.0 の場所


■アプリの作り方
ここ参照したほうが早い。
http://www.grails.org/plugin/app-engine


■アプリのデプロイ方法
ポイントは2つ。
1. "grails-app/conf/Config.groovy"にGAE/Jに作成したアプリケーション名を登録する(キーは,"google.appengine.application")
1. デプロイする前に,"grails set-version 1"ってする(少なくとも1回はやんないとダメ)。


肝心のデプロイだけど,ファイアウォール内では以下のコマンドは失敗する("appengine.google.comが見つからない"とかって言われるはず)。

grails app-engine deploy


JAVA_OPTSやgrailsコマンドに直接プロキシ設定しても埒があかなかったので,このやり方はあきらめる。かわりにappcfgコマンドを使う事にした。
appcfgでデプロイするには,war展開形式のディレクトリが必要なので,"grails war"でwarファイル作成,どっかテキトウな場所に解凍する(仮に,"$APP_HOME/war"とする)。


あとは,"appcfg update war"ってやるだけなんだが,そうは問屋が卸さない。
"appcfg プロキシ"でググると幾つか記事が見つかるが,ちょっと待て「それはPythonの話」だ。GAE/Jじゃ,環境変数HTTP_PROXYを設定しても上手く行かなかったんで,直接($APPENGINE_HOME/binにある) appcfg.cmd を開いてみたよ。
そしたら,あらビックリ。

@java -cp "%~dp0\..\lib\appengine-tools-api.jar" com.google.appengine.tools.admin.AppCfg %*


なんだ,このやっつけな内容は!?と落胆しつつ,下記のようにプロキシの設定をして事なきを得ましたよ。

@java -DproxyPort=nnnn -DproxyHost=proxy.example.com -cp "%~dp0\..\lib\appengine-tools-api.jar" com.google.appengine.tools.admin.AppCfg %*


ポイントは,appcfg が http/https の両方を使うみたいなので,プロキシの設定も "-Dhttp.proxyXXX" ではなく"-DproxyXXX"を使う事("-Dhttp.proxyXXX"と"-Dhttps.proxyXXX"の両方を設定してもいいはず)。


ps.
これで,Grails on GAE/Jの下準備が出来た。あとは Grails1.1.1出てからでいいや。:-)