2009/04/17

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)
今日はここまで。

0 件のコメント:

コメントを投稿