Google App EngineでGrails(その2)
ドメインを作ってアップロード
Google App EngineでGrails(その1) | ゲンゾウ用ポストイット の続き。
$ grails create-domain-class book
以下のようなドメインを作成。
class Book {
static constraints = {
}
String name
Integer price
}
関連物を一括生成
$ grails generate-all book
ほんで
$ grails war
当然これでは app engine
で動作しない。
ドメインはアノテーションを追記することで、 app engine
の両方で動作可能みたい。なのでアノテーションを追加。
import javax.jdo.annotations.*
import com.google.appengine.api.datastore.Key
@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
class Book {
static constraints = {
key nullable:true
}
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
Key key
@Persistent
String name
@Persistent
Integer price
}
試しにこの状態でwarファイル作成してみる。
$ grails war
今度は" @Persistent "なんてアノテーションないっていわれるので、libフォルダに $APPENGINE_HOME/lib/impl 以下のjarファイルを全てコピーして再実行。
今度は正常にwarファイルが作成できた。controller、viewも作成しておく。
$ grails generate-all
いよいよgoogle app engineにアップ
なんだか動くような気がしてきた!俄然はりきる。
プラグインからインストールされたコマンドでアップロードしてみる。
$ grails app-engine deploy
はい、エラー発生。 appengine-web.xml がどうのこうのいわれるので見てみると、そもそも grails create-app
で指定したアプリ名が appengine アップロード先と一致していなければならないみたい。そこでもう一度アプリ作成から実行。
$ grails create-app <APPENGINE_APP_NAME>
・・・domain、controller、viewも作成してから、もう一度。
$ grails app-engine deploy
やっぱりだめ。appEngineSDKっていうプロパティが迫っていされてないとかいわれる。環境変数 APPENGINE_HOME を設定し、-Dオプションで appEngineSDK を追加。
$ grails -DappEngineSDK=$APPENGINE_HOME app-engine deploy
・・・だめ。バージョンがおかしいとかなんとかいわれる(0.1となってちゃだめ、1〜100にしろって)
$ grails set-version 1
$ grails -DappEngineSDK=$APPENGINE_HOME app-engine deploy
・・・
[java] 98% Will check again in 2 seconds
[java] 99% Closing update: new version is ready to start serving.
[java] 99% Uploading index definitions.
[java] Update complete.
[java] Success.
[java] Cleaning up temporary files...
・・・おお!!なんかいけたぽい!!!もしかしてもう動くんじゃね??
アプリ実行
ほんでアプリ実行!!
・・・動かない・・・やっぱり無理なのかな?
こんなの出てるけど、さっぱり。
java.lang.NoClassDefFoundError: Could not initialize class groovy.lang.GroovySystem
at groovy.lang.ExpandoMetaClassCreationHandle.enable(ExpandoMetaClassCreationHandle.java:74)
at groovy.lang.ExpandoMetaClass.enableGlobally(ExpandoMetaClass.java:293)
at org.codehaus.groovy.grails.web.context.GrailsContextLoader.createWebApplicationContext(GrailsContextLoader.java:52)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:530)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:135)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1218)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:500)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:40)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.createHandler(AppVersionHandlerMap.java:190)
at com.google.apphosting.runtime.jetty.AppVersionHandlerMap.getHandler(AppVersionHandlerMap.java:167)
at com.google.apphosting.runtime.jetty.JettyServletEngineAdapter.serviceRequest(JettyServletEngineAdapter.java:113)
at com.google.apphosting.runtime.JavaRuntime.handleRequest(JavaRuntime.java:235)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4547)
at com.google.apphosting.base.RuntimePb$EvaluationRuntime$6.handleBlockingRequest(RuntimePb.java:4545)
at com.google.net.rpc.impl.BlockingApplicationHandler.handleRequest(BlockingApplicationHandler.java:24)
at com.google.net.rpc.impl.RpcUtil.runRpcInApplication(RpcUtil.java:359)
at com.google.net.rpc.impl.Server$2.run(Server.java:792)
at com.google.tracing.LocalTraceSpanRunnable.run(LocalTraceSpanRunnable.java:56)
at com.google.tracing.LocalTraceSpanBuilder.internalContinueSpan(LocalTraceSpanBuilder.java:489)
at com.google.net.rpc.impl.Server.startRpc(Server.java:748)
at com.google.net.rpc.impl.Server.processRequest(Server.java:340)
at com.google.net.rpc.impl.ServerConnection.messageReceived(ServerConnection.java:422)
at com.google.net.rpc.impl.RpcConnection.parseMessages(RpcConnection.java:319)
at com.google.net.rpc.impl.RpcConnection.dataReceived(RpcConnection.java:290)
at com.google.net.async.Connection.handleReadEvent(Connection.java:419)
at com.google.net.async.EventDispatcher.processNetworkEvents(EventDispatcher.java:733)
at com.google.net.async.EventDispatcher.internalLoop(EventDispatcher.java:207)
at com.google.net.async.EventDispatcher.loop(EventDispatcher.java:101)
at com.google.net.rpc.RpcService.runUntilServerShutdown(RpcService.java:249)
at com.google.apphosting.runtime.JavaRuntime$RpcRunnable.run(JavaRuntime.java:373)
at java.lang.Thread.run(Unknown Source)
今日はここまで。
ディスカッション
コメント一覧
まだ、コメントがありません