Rails3 対応 MongoDB ORM、Mongoid 詳解―インテグレーション
CARRIERWAVE
ファイルアップロードを扱う Carrierwave は Mongoid をサポートしています。現在のところ、ファイルと S3 に格納することを指定できます。:mount_on オプションがアップローダークラスに定義されてない場合は、ファイル名が アップローダー名_filename をフィールド名として、格納されます。
class User include Mongoid::Document mount_uploader :avatar, AvatarUploader #field is avatar_filename end
CUCUMBER
MongoDB はトランザクションをサポートしていないので、それぞれのフィーチャーが実行される前に、データベースがクリーンになるように、Cucumber にフックを追加したいと思います。
features/support/hooks.rb:
Mongoid.master.collections.select do |collection| collection.name !~ /system/ end.each(&:drop)
もし、database_cleaner という Gem を使っているなら、代わりに、features/support/database_cleaner.rb を作成してください。
require 'database_cleaner' DatabaseCleaner.strategy = :truncation DatabaseCleaner.orm = "mongoid" Before { DatabaseCleaner.clean }
RSPEC
Cucumber と同じように、RSpec の use_transactional_fixtures は Mongoid では影響しません。スイートを実行した後、データベースをクリーンにすることができます。
spec/spec_helper.rb:
Rspec.configure do |config| config.after :suite do Mongoid.master.collections.select do |collection| collection.name !~ /system/ end.each(&:drop) end end
おまけに :each の後何かすることもできますが、たくさんのインテグレーションスペックがある場合、遅くなるので注意してください。
もし、database_cleaner という Gem を使っているなら、代わりに、spec/spec_helper.rb の RSpec コンフィグブロックで以下の行を付け足してください。
Rspec.configure do |config| require 'database_cleaner' config.before(:suite) do DatabaseCleaner.strategy = :truncation DatabaseCleaner.orm = "mongoid" end config.before(:each) do DatabaseCleaner.clean end end
DEVISE
Mongoid で動くように Devise をセットアップするためにやることは、ActiveRecord を呼び出しているところを削除して、Mongoid に置き換えることです。
config/initializers/devise.rb:
# ==> ORM configuration # Load and configure the ORM. Supports :active_record (default), # :mongoid (bson_ext recommended) and :data_mapper (experimental). require "devise/orm/mongoid"
PASSENGER
MongoDB ウィキでは、Passenger の Smart spawning が有効なとき(デフォルトでは Conservative spawning です)、イニシャライザでインクルードする必要があると警告してますが、Mongoid では、特に何かする必要はありません。Passenger がこのモードで起動しているとき、ワーカーがフォークされたら、Mongoid はそれを検知し、再接続するようになっています。