Grails 1.1から1.2へ ザックリアップグレードテスト
今回の検証。
Grails-1.1で簡単な認証付きアプリを作って、Grails-1.2.0にアップグレードしてみる。
元 Grails 1.1 (1.1.xではなくて、1.1)
プラグイン acegi 0.5.2
grails 1.1でのプラグインはzipファイルを直に指定してインストール。(なんとなく)
https://svn.codehaus.org/grails-plugins/grails-acegi/tags/RELEASE_0_5_2/grails-acegi-0.5.2.zip
最初に、grails-1.1で簡単なアプリを作成
grails create-app v11acegi cd v11acegi grails install-plugin https://svn.codehaus.org/grails-plugins/grails-acegi/tags/RELEASE_0_5_2/grails-acegi-0.5.2.zip grails create-auth-domains grails generate-manager
データが既にあることにしてテストしたいので、データが保存されるように設定。
DataSource.groovy environments { development { dataSource { dbCreate = "update" // one of 'create', 'create-drop','update' url = "jdbc:hsqldb:file:devDB;shutdown=true" } } //..省略..// }
起動!
grails run-app
動作確認、authority登録、person登録、requestmap登録、でログイン確認
問題なく動作。(ここは動いてあたりまえか・・・。)
grailsを1.2.0に変更
では、grailsを1.2.0に変更。
とりあえず、そのまま起動!(run-app)
もちろんバージョンが違うメッセージが出る
Application expects grails version [1.1], but GRAILS_HOME is version [1.2.0] -
use the correct Grails version or run 'grails upgrade'
アップグレードコマンドを実行。
※実際のGrailsアプリケーションを使う場合は必ずバックアップをした方が良い。
grails upgrade
途中taglibとかがどうとか聞いてくるので、とりあえず"y"と答える。
最新のtomcatプラグイン、hibernateプラグインインストールとか勝手にやってくれる。
更新完了で、そのまま起動してみる。
grails run-app
見た目(デザイン的に)は1.2にならないけど、そのまま動きました!
問題なく動くのだね!
Grails 1.0.x系のからの移行は昔のポストを参考にしてほしいです。
Grails-1.0.*からGrails-1.1への〜 Pt.3 まだ最終版じゃないから何とも言えないけど・・・GORM・・・ - leftovers...
OSCacheProviderは何処へ?
キャッシュは、OSCacheProviderから、EhCacheProviderに変更されてる。
※OSCacheProviderは短い命だった!?
以下のようなWARNINGが出るのです。
[main] ERROR spring.BeanBuilder - WARNING: Your cache provider is set to 'com.opensymphony.oscache.hibernate.OSCacheProvider' in DataSource.groovy, however the classes for this provider cannot be found. Using Grails' default cache provider: 'net.sf.ehcache.hibernate.EhCacheProvider'
cache.provider_classを'net.sf.ehcache.hibernate.EhCacheProvider'に変更すれば、エラー出なくなります。
hibernate { cache.use_second_level_cache=true cache.use_query_cache=true cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider' }
パッケージの話:デフォルトパッケージのクラスが動かなかったことがあったけど?
Grails 1.2からは、ドメインクラスなどアーティファクトを生成するコマンドを実行すると、パッケージが指定されてないけど、パッケージ付けるのを推奨するよ!っと聞いてくる。強引に"y"でパッケージ無しで生成するのも可能。
今後のGrailsでは、デフォルトパッケージを受け付けないのか?
パッケージ付けないで仕事してはいけないとか言われると思うが、
Grailsの今までの流れでは、ただの飾りだったんですよ!偉い人にはそれがわからんのです。
半年間のマイルストーンやRC、そして、1.1.1->1.1.2 のどの辺でなのか忘れたけど、一時期パッケージの無いクラスが読みこまれない等(バグでしょ)があったが修正された?っぽい(未確認)。(バグがまだ出る人教えてください!)
アップグレードでの注意点 - i18n対応。
あたりまえと言えばあたりまえだが、どうやらupgradeコマンドでは、messages.propertiesを更新しないっぽい。
なので、def scaffold = Memo とかしている内容は、見た目がおかしくなる。
これを修正する方法は、grails-1.2.0のmessages.propertieをコピーするとOK。
あるいは、
http://gist.github.com/258601
ここに日本語対応を貼っておいたので、messages_ja.propertieに上書きするとOKです。