我有一个现有的生产用Ruby/Rails应用程序,我想随着时间的推移逐步迁移到MongoDB,因为不可能一次性全部重写。我希望能够在处理旧类时将其弃用。我计划使用MongoMapper。我找不到任何示例来解释如何设置数据库配置文件以允许在一个应用程序中连接两个数据存储库。
顺便说一下,我正在使用Rails 3。感谢您的帮助。
顺便说一下,我正在使用Rails 3。感谢您的帮助。
在Gemfile文件中包含mongo_mapper gem。然后,在你想要逐步迁移到MongoMapper的模型中,只需在你的模型中添加以下内容:
include MongoMapper::Document
class Publisher
include MongoMapper::Document
key :_id, String
key :mtd_uniques, Integer
key :mtd_demo_uniques, Integer
key :archive, Array
key :ignore, Boolean
end
我的用户模型(PostgreSQL):
class User < ActiveRecord::Base
validates_presence_of :first_name, :last_name, :email, :type
acts_as_authentic
def self.inherited(child)
child.instance_eval do
def model_name
User.model_name
end
end
super
end
end
development:
adapter: MongoDB
host: localhost
database: my-dev-db
test:
adapter: MongoDB
host: localhost
database: my-dev-db
staging:
adapter: MongoDB
host: remote-host (for me amazon ec2)
database: my-staging-db
production:
adapter: MongoDB
host: remote-host (for me amazon ec2)
database: my-production-db
并创建了一个初始化器,区分了这两个数据库:
/initializers/database.rb
# load YAML and connect
database_yaml = YAML::load(File.read("#{Rails.root}/config/config.yml"))
puts "Initializing mongodb"
if database_yaml[Rails.env] && database_yaml[Rails.env]['adapter'] == 'MongoDB'
mongo_database = database_yaml[Rails.env]
MongoMapper.connection = Mongo::Connection.new(mongo_database['host'], 27017, :pool_size => 5, :timeout => 5)
MongoMapper.database = mongo_database['database']
end
config/mongo.yml
并解析它以启动连接,类似于ActiveRecord的database.yml
或Mongoid的mongoid.yml
。rails g mongo_mapper:config
defaults: &defaults
host: 127.0.0.1
port: 27017
development:
<<: *defaults
database: db_name_development
...
File.read("#{Rails.root}/config/config.yml")
之后,它就可以工作了。非常感谢您抽出时间回答这个问题并使其如此清晰明了。 - Adrian Carr