Google App EngineでGrails(その2)

2021-02-24Grails

ドメインを作ってアップロード

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)

今日はここまで。



2021-02-24Grails