@kyanny's blog

My thoughts, my life. Views/opinions are my own.

MongoMapper.setup に渡す引数

MongoMapper は MongoMapper.setup メソッドで MongoDB への接続情報や logger オプションなどを渡して初期化を行うが、普段は YAML に設定を書いていたり、 MongoDB の接続情報は環境変数で設定していたりして、手元でちょっとした検証用のコードを書くときにどういうデータを渡せばいいんだっけ、と悩むことが多いのでまとめた。

https://github.com/kyanny/mongoclient-mongomapper-logging/blob/master/config.rb

MongoMapper.setup(config, env, options) と三つの引数を受け取る。

注意点は以下。

  • env は文字列でないとうまくいかない (Symbol ではダメ)
  • config のキーは env と一致するものがないといけないので全て String である必要がある

第一引数は database.yml みたいな、アプリケーション実行環境名を key とした Hash で、 host, port そして database などを指定する。

config = {
  'development' => {
    'host' => '127.0.0.1',
    'port' => 27017,
    'database' => 'myapp_development',
  },
  'production' => {
    'host' => '127.0.0.1',
    'port' => 27017,
    'database' => 'myapp_production',
  },
}

第二引数は第一引数 config で定義した設定のうち、どれを利用するかを指定する。

env = 'development'

第三引数はオプションで、 logger などはここで渡す。

options = {
  logger: Logger.new(STDOUT),
}

まとめるとこうなる。

MongoMapper.setup(
  {
    'development' => {
      'host' => '127.0.0.1',
      'port' => 27017,
      'database' => 'myapp_development',
    },
    'production' => {
      'host' => '127.0.0.1',
      'port' => 27017,
      'database' => 'myapp_production',
    },
  }, # config
  'development', # env
  logger: Logger.new(STDOUT) # options
)

MongoMapper の GitHub リポジトリにあるサンプルコードでは MongoMapper.database = 'testing' みたいなのがたくさんあり、手軽に試すにはこのショートハンドを使うのが便利だが、この方法だと logger を設定することができないため、 setup を使った方法もさらっと書けるようになっておくに越したことはない。