leftovers...

about grails groovy

Grails-1.0.*からGrails-1.1への〜 Pt.1

GrailsのバージョンがアップしたらGrailsプロジェクトで更新する際に使用するコマンドは・・・・、

grails upgrade - 「こわい」「信用できない」「過去に良い経験が無い」

と、自分のまわりでは評判の悪いのですが・・。
事情があって、実際に、既存のgrails-1.0.5のGrailsプロジェクトをGrails-1.1へマイグレーションしてみたのでメモしておきます。

Grails-1.1で大きく(別に大きくない)変わった点でPluginの保存場所が変更にの他に、hibernateが本体から切り離され、Grailsアプリケーションを新規作成の際には、基本プラグインとしてインストールされる・・・があります。

Grails-1.1からインストールしたPluginはUSER_HOME/.grails以下に保存されます。
そして、作成したGrailsアプリケーション(PROJECT_HOME)から、どのPluginを使用しているかは、PROJECT_HOME/application.propertiesファイルで管理されるようになります。
Grails 1.0.5 PROJECT_HOME/application.properties

app.version=0.1
app.servlet.version=2.4
app.grails.version=1.0.5-SNAPSHOT
app.name=mgr

Grails 1.1のPROJECT_HOME/application.properties

app.version=0.1
app.servlet.version=2.4
app.grails.version=1.1-SNAPSHOT
plugins.hibernate=1.1-beta3 //<-これ
app.name=migr

*1


そう!ここです。hibernateが本体から切り離され・・・・が、最初に書いた、

grails upgrade - Grailsがアップグレードした際にGrailsプロジェクトを更新するコマンド。

grails upgradeは、hibernateプラグインをダウンロードしてインストールし、application.propertiesへ追記もしてくれます。
Grails-1.0.* から、Grails-1.1系へのアップグレードの際に、これを怠ると、hibernateが実装されません。
なのでデータベースが使えなくなります。大変です。



まあ、それはさておき。アップグレードのコマンドも実行したので、

http://www.grails.org/1.1-beta3+Release+Notes の下の方にかかれている、
Plugins are now stored in your USER_HOME directory. You will need to re-install your plugins or run:
これからプラグインはUSER_HOMEディレクトリに保管されるよ!なので再インストールするか、以下のコマンドで起動してねv

を参考にコマンド実行。

grails -Dgrails.plugins.dir=./plugins run-app

追記 Grails-1.0.*からGrails-1.1への〜 Pt.1.0.5 - leftovers...
で、失敗!!!コンパイルできない!
プラグインを全く認識してない!ぢゃない??

そういえば、Grails-1.1から実装*2のプチ(結構!?)便利機能があります。
それは、BuildConfig.groovy!!

これを使うことで、プラグインリポジトリの変更ができたりとか、ここに記述することで、プラグインは、マシンのどこにあってもOKなのです。

なので、BuildConfig.groovyで、必要なプラグインのパスを設定!*3
BuildConfig.groovy

grails.plugin.location."acegi"="./plugins/acegi-0.5.1"
grails.plugin.location."navigation"="./plugins/navigation-1.0"

これで、普通に

grails run-app

普通に起動しましたとさ

allowedMethodsのプロパティが書いてあると、若干変更になったので、こんなメッセージでます。

[0] commons.DefaultGrailsControllerClass The allowedMethods property in EntryController should be declared static. The non static version is supported for now but has been deprecated and may not work in future versions of Grails.

//def allowedMethods = [delete:'POST', save:'POST', update:'POST']
def を staticに変更しましょう。
static allowedMethods = [delete:'POST', save:'POST', update:'POST']

まとめ。

  • プラグイン置き場かわったよ
  • hibernateは本体からきりはなされたからね
  • #grails upgradeコマンド使わなくてもどうにかなったよ
  • application.propertiesにplugins.hibernate=1.1-beta3追加
  • grails-app/conf/BuildConfig.groovyを追加して、grails.plugin.location."acegi"="./plugins/acegi-0.5.1"等を書き込めばプラグイン認識するよ


#ページネートの日本語が文字化けしてるのは、また今度・・・。

追記:ページネートの文字化け・・・どうやらnative2asciiがかかっていない物、プロジェクトのgrails-app/i18n/内をよんでるっぽい。


つづく。

*1:ちなみに、grails install-plugin を行っていない状態で、"plugins.acegi=0.5.1"などの公式リポジトリに存在するプラグインを指定しておくと、起動時に勝手にダウンロードしてプラグインをインストールしてくれます。

*2:ぁ、PreInit.groovyか・・

*3:説明は、http://www.grails.org/1.1-beta3+Release+Notes