2011年11月28日月曜日

Load the JQuery Library via CDN with Grails Resources Plugin

Grails version
2.0.0.RC1
Resources Plugin version
1.1.1

You can use the jquery library on existing CDN networks with Grails Resources Plugin in this way.

// grails-app/conf/XXResources.groovy
modules = {
    // Defines JQuery's CDN network
    overrides {
        def jqueryVersion = org.codehaus.groovy.grails.plugins.jquery.JQueryConfig.SHIPPED_VERSION
        'jquery' {
            resource id:'js',
                     linkOverride:"http://ajax.googleapis.com/ajax/libs/jquery/${jqueryVersion}/jquery.min.js"
        }
    }
}

Note: The resources plugin load a resource via 'linkOverride' url only when it is not in debugging mode.
see also: Grails Resources Plugin: Debbugging

2011年11月25日金曜日

Cloud Foundry上のMongoDBに既存データを流し込む

Cloud Foundryは、VMWare社が開発しているPaaS環境です。現在、クラウド上でβ試験中の環境が無料で試用できます。

GrailsなどのWebフレームワーク、MongoDB、MySQL、Redis等々、様々なサービスを起動して使用できるようです。

基本的な使い方はこちらを見ていただくとして、
http://d.hatena.ne.jp/y-kawaz/20110425/1303708958
http://support.cloudfoundry.com/entries/20054091-vmware-cloud-foundry-getting-started-japanese

Cloud Foundryでは「vmc」というCLIが提供されていて、これでアプリのデプロイやらを行うわけですが、
これに最近追加された「tunnel」というサブコマンドで、このPaaS上のMongoDBに既存データを流し込めるらしいので試してみました。

今回は、mongodumpで既存データをバックアップし、mongorestoreでCloudFoundry上のMongoDBにデータを流し込みます。
これらのツールの使い方は、こちらの記事がわかりやすいです。
http://d.hatena.ne.jp/rougeref/20110325

流し込むデータファイルは、前もってmongodumpでダンプしておいたものとします。

vmc tunnelって?

vmc tunnelを使うと、あたかもローカルのポート10000番で動作しているMongoDBに接続しているかのように、CloudFoundry上のMongoDBに接続できます。
ローカル環境から、


mongo localhost:10000 --username xxx --password xxx

という感じでCloudFoundry上のmonogodに接続して操作できるようになるわけですね。

詳しくは、以下でわかりやすく図解してくださっています。
http://blog.udcp.net/2011/11/22/vmc-tunnel/

今回の作業も、すべて上記の記事を見ながら行いました。

vmcのインストール

Cloud Foundry上のアプリケーションやMongoDBなどのサービスの操作は、vmcというRubyGemのツールで行います。

こちらを参考に、次のように必要なgemを入れます。


gem install vmc --pre
gem install caldecott

ちなみに、64ビット版のWindows7上だとネイティブライブラリのコンパイル時にエラーになってインストールできませんでした。

エラーメッセージ見る限り、64ビット版のWindowsには対応していないように感じましたが、特に深く追求する気もないのでVMWare上のCentOSで実行することにします。

ネイティブライブラリ依存は将来的に取り除かれる予定らしいので、それに期待しておきましょう。
http://blog.cloudfoundry.com/post/12928974099/now-you-can-tunnel-into-any-cloud-foundry-data-service

Rubyが入っていないときは、最近はRVMでインストールするのがナウいらしいので、この辺を参考にしていれましょう。
https://rvm.beginrescueend.com/
http://d.hatena.ne.jp/mirakui/20100502/1272849327

MongoDBのインストール

前述の通り、CloudFoundry上のmongodには、ローカルから

mongo localhost:10000 --username xxx --password xxx
って感じで接続します。つまり、ローカル上にmongoクライアントをインストールする必要があるはず。

mongoのインストール方法はこちら。公式がyumリポジトリを提供してくれており、インストールは異様に簡単です。
http://www.mongodb.org/display/DOCS/CentOS+and+Fedora+Packages

現在CloudFoundry上で稼働しているMongoDBはバージョン1.8.1なので、合わせた方が良いかもしれません。
私は既に2.0.1を入れてしまっていたのでソレを使いました。今回の作業では特に問題は起きてません。

vmc tunnelの実行

http://blog.udcp.net/2011/11/22/vmc-tunnel/に書かれているとおりにvmc tunnelを実行します。

% vmc tunnel
1: mongodb-ea00999
2: redis-8dcyyyy
Which service to tunnel to?: 1
Password: ***********
Getting tunnel connection info: OK

Service connection info:
  username : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  password : yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
  name     : db

Starting tunnel to mongodb-ea00999 on port 10000.
1: none
2: mongo
Which client would you like to start?: 1
Open another shell to run command-line clients or
use a UI tool to connect using the displayed information.
Press Ctrl-C to exit...

最後に「2」を選べば、さっきインストールしたローカルのmongoシェルが勝手に起動して、CloudFoundry上のmongodにつなぎに行ってくれます

今回はmongoのインタラクティブシェルには用はないので、「1」を選んで待機させておきます。

これで、ローカルのポート10000番を通して、CloudFoundry上のMongoDBに接続できるようになりました。

mongorestoreの実行

ターミナルをもう一つ立ち上げて、mongorestoreを実行します。

接続情報は、vmc tunnel実行時に表示されるので、待機中のターミナルをみれば載っているでしょう。

Service connection info:
  username : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  password : yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy
  name     : db

CloudFoundry上のMongoDBへの接続情報を確認したら、mongorestoreを実行してデータを流し込みます。

流し込むデータファイルは、前もってmongodumpでダンプしておきます。

mongorestore -h localhost:10000 -d db(上で確認した「name」) -c book(ダンプしたコレクション名) \
  -u (上で確認したユーザー名) -p (上で確認したパスワード) --drop \
  dump/db/book.bson(mongodumpで取得したダンプファイル)

これで、MongoDB上へデータが流し込まれているはず。

mongoシェルなどでデータを確認したら、待機させておいたvmc tunnelを終了させて完了です。

既存のデータでCloud Foundryを試してみたい、運用してみたい、といった場合もこれで何とかなりそうですね。