mongoDB用のO/RMapperにMongoidを使う
fluentdで吐いたデータをmongoDB用のormを使って扱いたいので準備をしていきます。
ORMは
- Mongoid: Home http://mongoid.org/en/mongoid/index.html
- MongoMapper http://mongomapper.com/
あたりがメジャーらしいですが、MongoManagerは以前使ったことある&検索してみるとMongoidのほうが記事数が多い&ドキュメントが豊富、ということでMongoidを使ってみることにします。
rails+mongoidセットアップ
2,3ステップで済んだのでとても簡単でした。
- gemのインストール
- 設定ファイルconfig/mongoid.ymlを作成
- (デフォルトのORMをactive recordに戻す)
まずはgemを追加.
#ORMapper for mongodb gem 'mongoid' gem 'bson_ext'
install.
bundle install
で、コマンドでmongoid用の設定ファイルを作ろうとしたら、エラー(ヽ'ω`)
i$ rails generate mongoid:config /Users/takayuki/.rvm/gems/ruby-1.9.3-p385/gems/kaminari-0.14.1/lib/kaminari/models/mongoid_extension.rb:24:in `block in <module:Document>': undefined method `scope' for Mongoid::Document:Module (NoMethodError) ・・・
undefined method `scope' for Mongoid::Document:Module · Issue #415 · amatsuda/kaminari によると「rails4に対応してるこっち使いなYO!」ということなのでGemfileのmongoidのところを書き換えて、入れなおす。
gem 'mongoid', '~> 4', github: 'mongoid/mongoid'
次は問題なくコマンド通りました。
$ rails generate mongoid:config create config/mongoid.yml
mongoidはデフォルトのormであるactive recordを置き換えてる形になっているのですが、今回はログ用にサブで使うので、デフォルトをactive recordに戻します.
config/application.rb:
config.generators do |g| g.orm :active_record end
これでmongo generate model hogeとしたときは、activerecordのモデルが今まで通りできます。 mondoidのmodelを作りたいときは
$ rails generate mongoid:model
とすればOK。
あと参考にさせていただいた RailsでActiveRecordとMongoidの共存のさせ方 - Qiita [キータ] によるとclassのロードがデフォだとmodels以下すべてになってしまうそうなので、逐次設定します。 アナログ設定になりますが、自分のケースだとそこまでmodel数も増えないだろうからそんな手間にはならなそうです。
これであとはもうコマンドでmodelを逐次追加するだけ!