Google App Engineでgrails(その2)
ドメインを作ってアップロード
前回の続き。
$ 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)
今日はここまで。
ディスカッション
コメント一覧
まだ、コメントがありません