Hatena::ブログ(Diary)

leftovers... このページをアンテナに追加 RSSフィード

2009-02-17

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']

まとめ。


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

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


つづく。

Grails-1.0.5-SNAPSHOT パラメータ付きのアクションとenctype="multipart/form-data"をPOSTしたときのバグ

詳細 http://jira.codehaus.org/browse/GRAILS-3870

enctype="multipart/form-data"のフォームを投げる先のアクションにパラメータが有った場合 Ex. /some/act?a=1 エラーがでてしまうバグ

1.1のソースではなおってるのですが・・・1.0.5-SNAPSHOTではなおってない!まあ、修正簡単だし、近々更新されると思いますが、一応パッチ置いておきます。

Index: /works/sources/grails/src/web/org/codehaus/groovy/grails/web/mapping/DefaultUrlMappingInfo.java
===================================================================
--- /works/sources/grails/src/web/org/codehaus/groovy/grails/web/mapping/DefaultUrlMappingInfo.java	(revision 8584)
+++ /works/sources/grails/src/web/org/codehaus/groovy/grails/web/mapping/DefaultUrlMappingInfo.java	(working copy)
@@ -204,13 +204,7 @@
     }
 
     private String checkDispatchAction(HttpServletRequest request, String actionName) {
-        Enumeration paramNames = request.getParameterNames();
-        if (!paramNames.hasMoreElements()) {
-            //TODO Move this multipart code out of here if possible and only do once per request
-            paramNames = tryMultipartParams(request, paramNames);
-        }else{
-            MultipartRequestHolder.setMultipartRequest(null); 
-        }
+        Enumeration paramNames = tryMultipartParams(request, request.getParameterNames());
 
         for (; paramNames.hasMoreElements();) {
             String name = (String) paramNames.nextElement();

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

*2:ぁ、PreInit.groovyか・・

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