railsからmongodbを使ってみた

MongoDB を Rails で使う (導入まで) - Qiita [キータ] http://qiita.com/hineltjar@github/items/3921296f2346f040d08c

の記事を参考にrailsからmongodbを操作してみます。

Getting Started with Rails 3 — MongoDB Ecosystem 2.2.2 http://docs.mongodb.org/ecosystem/tutorial/getting-started-with-ruby-on-rails-3/

の記事もありましたが、Qiita記事に習ってmongoidを使ったほうがよさそう。

The Ruby Toolbox - MongoDB Clients https://www.ruby-toolbox.com/categories/mongodb_clients

mongodb_clientsの中でmongoidが一番使われているようです。

rails new

rails new mongo_sample --skip-bundle --skip-active-record

bundleは後でする、active-recordは不要

gem install

Gemfile

gem 'mongo_mapper'
gem 'bson_ext'
gem 'mongoid'

bundle install

bundle install --path vendor/bundle

config/initializers/mongo.rbの作成

# coding: utf-8
MongoMapper.connection = Mongo::Connection.new('localhost', 27017)
MongoMapper.database = "#mongo_test-#{Rails.env}"

# Passengerを利用する場合のみ必要?
if defined?(PhusionPassenger)
  PhusionPassenger.on_event(:starting_worker_process) do |forked|
    MongoMapper.connection.connect if forked
  end
end

mongoidの初期化

rails g mongoid:config

scaffoldの作成

rails g scaffold Post title:string subscription:text

動作確認

public/index.htmlの削除

rm public/index.html

server起動

rails s

mongodb起動

mongod

ブラウザ起動してデータを登録する

http://localhost:3000/posts

データの確認

-> % mongo mongo_sample_development
MongoDB shell version: 2.4.4
connecting to: mongo_sample_development
Server has startup warnings:
Mon Jul  1 09:35:55.897 [initandlisten]
Mon Jul  1 09:35:55.897 [initandlisten] ** WARNING: soft rlimits too low. Number of files is 256, should be at least 1000
> show collections
posts
system.indexes
> db.posts.find()
{ "_id" : ObjectId("51d0d141c0d8e0ff34000001"), "title" : "test", "subscription" : "test" }
>

mongoid

config/mongoid.yml

development:
  sessions:
    default:
      database: mongo_sample_development
      hosts:
        - localhost:27017
      options:
  options:
test:
  sessions:
    default:
      database: mongo_sample_test
      hosts:
        - localhost:27017
      options:
        consistency: :strong
        # In the test environment we lower the retries and retry interval to
        # low amounts for fast failures.
        max_retries: 1
        retry_interval: 0

接続先を書くファイルはdatabase.ymlじゃなくてmongoid.ymlなんですね。

app/model/post.rb

class Post
  include Mongoid::Document
  field :title, type: String
  field :subscription, type: String
end

include Mongoid::Documentっていうのがキモっぽい。あと当然ですけどactive-recordの書き方じゃないですね。

雑記

WEBコンソールもあるんですね。

http://localhost:28017/

まとめ

さらっと試してみました。 次回はmongoidの使い方を深堀りしてみたいと思います。