发布于 2015-09-14 15:14:27 | 125 次阅读 | 评论: 0 | 来源: 网络整理

It’s not difficult to use MongoDB with Rails 3. Most of it comes down to making sure that you’re not loading ActiveRecord and understanding how to use Bundler, the new Ruby dependency manager.

Install the Rails 3

If you haven’t done so already, install Rails 3.

# Use sudo if your setup requires it
gem install rails

Configure your application

The important thing here is to avoid loading ActiveRecord. One way to do this is with the --skip-active-record switch. So you’d create your app skeleton like so:

rails new my_app --skip-active-record

Alternatively, if you’ve already created your app (or just want to know what this actually does), have a look at config/application.rb and change the first lines from this:

require "rails/all"

to this:

require "action_controller/railtie"
require "action_mailer/railtie"
require "active_resource/railtie"
require "rails/test_unit/railtie"

It’s also important to make sure that the reference to active_record in the generator block is commented out:

# Configure generators values. Many other options are available, be sure to check the documentation.
# config.generators do |g|
#   g.orm             :active_record
#   g.template_engine :erb
#   g.test_framework  :test_unit, :fixture => true
# end

As of this writing, it’s commented out by default, so you probably won’t have to change anything here.

Bundle and Initialize

The final step involves bundling any gems you’ll need and then creating an initializer for connecting to the database.

Bundling

Edit Gemfile, located in the Rails root directory. By default, our Gemfile will only load Rails:

gem "rails", "3.0.0

Normally, using MongoDB will simply mean adding whichever OM framework you want to work with, as these will require the “mongo” gem by default.

# Edit this Gemfile to bundle your application's dependencies.

source 'http://gemcutter.org'

gem "rails", "3.0.0"
gem "mongo_mapper"

However, there’s currently an issue with loading bson_ext, as the current gemspec isn’t compatible with the way Bundler works. We’ll be fixing that soon; just pay attention to this issue.

In the meantime, you can use the following work-around:

# Edit this Gemfile to bundle your application's dependencies.

require 'rubygems'
require 'mongo'
source 'http://gemcutter.org'

gem "rails", "3.0.0"
gem "mongo_mapper"

Requiring rubygems and mongo before running the gem command will ensure that bson_ext is loaded. If you’d rather not load rubygems, just make sure that both mongo and bson_ext are in your load path when you require mongo.

Once you’ve configured your Gemfile, run the bundle installer:

bundle install

Initializing

Last item is to create an initializer to connect to MongoDB. Create a Ruby file in config/initializers. You can give it any name you want; here we’ll call it config/initializers/mongo.rb:

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

if defined?(PhusionPassenger)
  PhusionPassenger.on_event(:starting_worker_process) do |forked|
    MongoMapper.connection.connect if forked
  end
end

Running Tests

A slight modification is required to get rake test working (thanks to John P. Wood). Create a file lib/tasks/mongo.rake containing the following:

namespace :db do
  namespace :test do
    task :prepare do
      # Stub out for MongoDB
    end
  end
end

Now the various rake test tasks will run properly. See John’s post for more details.

Conclusion

That should be all. You can now start creating models based on whichever OM you’ve installed.

最新网友评论  共有(0)条评论 发布评论 返回顶部

Copyright © 2007-2017 PHPERZ.COM All Rights Reserved   冀ICP备14009818号  版权声明  广告服务