リブショカ(図書館書架)β版

リブショカ(図書館書架)に関する情報発信

grails3.2.Xのアプリケーションをjettyへdeploy

久しぶりの技術関係,かなり手間取ったので備忘録的メモ。

 

現在開発中のWebアプリはApache+TomcatからJettyへとコンテナを変更する予定である。

これまでJettyは未経験。実装するサーバがミニマムであることから,リソースを節約

できる点を評価してJettyを選択した。Jettyのインストール自体はBinaryをDownload

して適当なディレクトリに配置するだけなので,割愛。

 

Webアプリの基礎ができた段階で,grails prod warでDeploy用warファイルを作って

tomcat7で稼働を確認していたが,jettyにデプロイする前に現状のwarをTomcat7で試すことにした。

 まずはOracle8へバージョンアップ。これはJettyがJava8だったため。これが

問題の始まり。grailsにはopenJDK7を使っていたので,grailsもTomcat7もOracle8に

たことによって,開発環境とDeploy環境で大きさ差ができた。これによってtomcat7

へのDeployでエラーがでるようになる。この部分については,Grailsのドキュメントで

回避策が書いてあったので,対応を施す。具体的には,build.graidleを修正

2 Getting Started 3.3.0

 

これでtomcat7でのDeployができたので,次はJettyへ.しかし,Deployはうまくいった

ように見えるが,実際はWebアプリとしてではなく,単に静的コンテンツとして

認識されているようである。最初に疑ったのは,Web.xml。grails3からはweb.xml

作成しないようになったので,これが原因かと考えた。Jettyのドキュメントには,

web.xmlは必須となっていたので,さらにこれが原因かと思えたが,よく考えれば

grailsのドキュメントには,grailsから生成されるwarはほとんどのサーブレット

コンテナでDeployできるとなってるのだから,そこを疑うのは間違っている。このあたりのカンが鈍ってしまうのは,現役リタイアなのでしかたがないかと思う。

結局,原因は複数であった。

 

 1)grails3.2.0ではwarの生成時にバグがあり,grails3.2.1へ更新する必要があった。

 2)grails3.2.9へ更新したが(SDK),これだけではbuild.gradleは更新されないので,ダミーのプロジェクトを作って,そこからbuild.gradleをコピーして,必要部分を追記した。

 3)スタートアップ用の組み込みコンテナがtomcatだったので,これをjettyに変更した。(build.gradle)

//*** stop  tomcat 
//compile "org.springframework.boot:spring-boot-starter-tomcat"

//*** add jetty 
compile "org.springframework.boot:spring-boot-starter-jetty"

 

    4)logback.groovy実行用のjarが不足するので,build.gradleに追加

         runtime 'org.codehaus.groovy:groovy-all:2.4.10'

 

これでどうにかDeployできた。1)まで行きつくのが早かったが,その先でこまった。2)については,てっきりGrailsの更新によって自動的にbuild.gradleも更新されるのかと思い込んでしまったのがいけなかった。

jettyについてもメモ。じつはjettyがいちばん曲者だった。

jettyそのものは,/usr/local/jettyに配置したが,ドキュメントでは,jetty稼働は別のディレクトリで行えとなっている。そのために,jetty_homeを設定するようだ。

で,実際にjetty.homeを設定してユーザーディレクトリから起動したのだが,

Webアプリを認識しない。/usr/local/jetty/bin/jetty.shを/etc/init.d/jettyにコピーして

これを実行するとダメ,しかし,/usr/local/jetty/bin/jetty.shで起動するとちゃんとWebアプリを認識する。これがよくわからない。現在も調査中。設定ファイルは.jettyrcとして起動するユーザーのホームディレクトリに配置して,ちゃんと環境変数等も設定できているので,問題ないと思われる。配布バイナリにはいっているstart.iniもちゃんと実行環境にコピーしているが,なぜか/usr/init.d/jettyではうまくWebアプリを認識できない。ここの部分の切り分けができずに,grailsに原因を求めたことから,無駄に遠回りした。

 

久しぶりに開発関係の作業だった。うまくいかずにかなり四苦八苦したが,終わってみればやはり楽しかったと思い返す。もう少し,まとまった時間がとれるとよいのだが。

 

本業の都合もあり,なかなか進捗しないのが悩みの種である。