トップ 最新

ただのにっき

2011-11-16(水) [長年日記]

Debian squeezeにMongoDB / Mongoid環境を作る

仕事でちょっとしたデータベースが必要になったときは(スキーマレスが良いということもあり)KVSのKyotoCabinetを使ってきたのだけど、ちょっと不定形なデータを入れる必要が出てきたので、MongoDBを使ってみることに。いまごろ。ま、普通にパッケージで入れればいいよね:

% sudo aptitude install mongodb
...同時ににmongodb-clients、mongodb-server、mongodb-devが入る

% mongo
MongoDB shell version: 1.4.4
url: test
connecting to: test
type "help" for help
> show dbs
admin
local
> exit
bye

ふむん。Rubyから扱うのはMongoidが良いそうなので:

% gem install mongoid bson_ext
% irb -rmongoid
irb(main):001:0> Mongoid.configure {|conf| conf.master = Mongo::Connection.new.db('test')}
Mongoid::Errors::UnsupportedVersion: MongoDB 1.4.4 not supported, please upgrade to 2.0.0.
        from /home/sho/lib/ruby/gems/1.9.1/gems/mongoid-2.3.3/lib/mongoid/config.rb:294:in `check_database!'
        from /home/sho/lib/ruby/gems/1.9.1/gems/mongoid-2.3.3/lib/mongoid/config.rb:217:in `master='
        from (irb):1:in `block in irb_binding'
        from /home/sho/lib/ruby/gems/1.9.1/gems/mongoid-2.3.3/lib/mongoid.rb:115:in `configure'
        from (irb):1
        from /home/sho/bin/irb:12:in `<main>'
irb(main):002:0>

ぐは。パッケージが最新版ではないというのはDebianの宿命だなー。でも野良ビルドするのはイヤだなぁ……と渋っていたら、MongoDBの公式パッケージがあると知ったので、ここに書かれているとおりにしてみた。こういうのは嬉しいですね:

% sudo aptitude remove mongodb #Debianのパッケージはとりあえず削除

% sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10
...
gpg: requesting key 7F0CEB10 from hkp server keyserver.ubuntu.com
...

ちくしょー(笑)。これはPROXYの内側にいるせいだ。で、回避策を発見したのでそのように。keyの値はいったんapt/source.listに追加した結果出てきたものを使った:

% gpg --keyserver keyserver.ubuntu.com --keyserver-option http-proxy=YOUR_PROXY_SERVER:8080 --recv-keys 9ECBEC467F0CEB10
...
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)

% gpg --fingerprint 9ECBEC467F0CEB10
pub   2048R/7F0CEB10 2010-02-05
      Key fingerprint = 492E AFE8 CD01 6A07 919F  1D2B 9ECB EC46 7F0C EB10
uid                  Richard Kreuter <richard@10gen.com>
sub   2048R/A89B0149 2010-02-0

% gpg --armor --export 9ECBEC467F0CEB10 | sudo apt-key add -
OK

もう大丈夫だろう(たぶん):

% sudo vi /etc/apt/sources.list
# 「deb http://downloads-distro.mongodb.org/repo/debian-sysvinit dist 10gen」を追加

% sudo aptitude update
% sudo aptitude install mongodb-10gen

% irb -rmongoid
irb(main):001:0> Mongoid.configure {|conf| conf.master = Mongo::Connection.new.db('test')}
=> #<Mongo::DB:0x9debea4 @name="test"...(略)
irb(main):002:0> class Person; include Mongoid::Document; end
=> Person
irb(main):002:0> person = Person::new( :name => 'tdtds', :age => 14 )
irb(main):003:0> person.name
=> "tdtds"
irb(main):004:0> person.age
=> 14
irb(main):005:0> person.save
=> true
irb(main):006:0> exit

% mongo
MongoDB shell version: 2.0.1
connecting to: test
> show dbs
local   (empty)
test    0.0625GB
> show collections
people
system.indexes
> db.people.find()
{ "_id" : ObjectId("4ec47750ebbc3c1c3d000001"), "name" : "tdtds", "age" : 14 }

よろしい。今日はここまで(えっ)。