RailsでMongoDBを使う設定

Rails は使える、という前提で。

configuration

BSON 4.0.0 Tutorial — Ruby Driver Manual 2.8

gem の設定を一般ユーザでやると怒られる。
sudo でもダメ。

root でやったら問題なかった。
うーん、謎。ここらへんもまだ勉強が必要。

  • 一般ユーザ
$ rake gems:install
(in /home/m-iwamoto/test/rails/iwatest)

$ rake gems:unpack
(in /home/user/test/rails/test)
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /usr/lib/ruby/gems/1.8 directory.

$ sudo rake gems:unpack
パスワード:
(in /home/user/test/rails/test)
config.gem: Unpacked gem mongo_mapper-0.7.0 in vendor/gems has no specification file. Run 'rake gems:refresh_specs' to fix this.
  • root
# rake gems:install
(in /home/user/test/rails/test)

# rake gems:unpack
(in /home/user/test/rails/test)
Unpacked gem: '/home/user/test/rails/test/vendor/gems/mongo_mapper-0.7.0'
使ってみる
  • まずMongoDB にテスト用のコレクションを作成
$ mongo
MongoDB shell version: 1.2.2
url: test
connecting to: test
type "help" for help

> show dbs
admin
fulsat9-development
test

> use fulsat9-development
> db.hoges.save({ x : 3, y : 9});
> db.hoges.find()
{ "_id" : ObjectId("4b933f5a36010e0ffd3608d9"), "x" : 3, "y" : 9 }
$ cat config/initializers/database.rb
MongoMapper.database = "fulsat9-#{Rails.env}"

if defined?(PhusionPassenger)
   PhusionPassenger.on_event(:starting_worker_process) do |forked|
     MongoMapper.connection.connect_to_master if forked
   end
end
  • Model はこんなかんじ
$ cat app/models/hoge.rb
class Hoge
  include MongoMapper::Document

  key :x,    Integer, :default => 0
  key :y,    Integer, :default => 0
end
  • Controller

複数形と単数形に注意して。

$ cat app/controllers/hoges_controller.rb
class HogesController < ApplicationController
  def index
    @hoges = Hoge.all
  end
end
  • View
表示するだけ。
$ cat app/views/hoges/index.html.erb
<% @hoges.each do |hoge| %>
  <li><%= hoge['x'] %></li>
  <li><%= hoge['y'] %></li>
<% end %>
  • 起動!

$ script/server

http://localhost:3000/hoges にアクセスして、

・ 3
・ 9

こんなかんじで表示されればおk。
以上!(`・ω・´) >ビシッ