隨着時間的推移,我已經有了一個現有的生產Ruby/Rails應用程序,隨着時間的推移我想遷移到MongoDB,因爲它不是一個可以全部重寫一次。我很樂意能夠在我接觸到他們的時候貶低我的舊課程。我打算使用MongoMapper。我找不到任何人解釋如何設置數據庫配置文件以允許連接到一個應用程序中的兩個數據存儲的示例。如何在相同的Ruby Rails項目中配置MongoMapper和ActiveRecord
FWIW,我正在使用Rails 3.我很感激幫助。
隨着時間的推移,我已經有了一個現有的生產Ruby/Rails應用程序,隨着時間的推移我想遷移到MongoDB,因爲它不是一個可以全部重寫一次。我很樂意能夠在我接觸到他們的時候貶低我的舊課程。我打算使用MongoMapper。我找不到任何人解釋如何設置數據庫配置文件以允許連接到一個應用程序中的兩個數據存儲的示例。如何在相同的Ruby Rails項目中配置MongoMapper和ActiveRecord
FWIW,我正在使用Rails 3.我很感激幫助。
將你的mongo_mapper gem包含在你的Gemfile中。然後,在你慢慢想開始遷移到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
我的用戶模型的例子( Postgres的):
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
關於這樣做的好處是,所有其他車型仍然使用ActiveRecord,所以你可以使用2個不同的數據庫,直到一切都遷移到蒙戈。這是我使用的一個例子。使用的是Postgres(託管在Heroku上的應用程序)
我的設置使用MongoMapper大型數據集合,和用戶模型我甩配置的東西在我的config.yml
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
,並創造了2個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
它看起來像從以前的答案的初始化代碼不再需要。 mongo_mapper將自己尋找一個文件config/mongo.yml
並解析它並開始連接。類似於ActiveRecord的database.yml
或Mongoid的monogoid.yml
。
Mongo映射器甚至附帶一個Rails生成器來爲你設置這個文件。所有你需要做的是:
rails g mongo_mapper:config
這導致:
defaults: &defaults
host: 127.0.0.1
port: 27017
development:
<<: *defaults
database: db_name_development
...
當然,如果他們在自述或在文檔上提及這一點,將是很好。我正在使用mongo_mapper
版本0.10.1
同意。這篇文章有點老了。目前我們正在使用MongoDB進行分析,但甚至沒有使用MongoMapper。我認爲最好只使用mongo ruby驅動程序(https://github.com/mongodb/mongo-ruby-driver),並製作應用程序所需的自定義集成點。沒有必要愚弄ActiveRecord認爲mongo文檔是AR對象。 –
添加配置文件 –
謝謝@Chris。我不得不做一個小改動:'File.read(「#{Rails.root} /config/config.yml」)'那之後,它就工作了。非常感謝花時間回答這個問題,並且讓它如此清晰。 –
啊對!我已經將RAILS_ROOT設置爲常量。很高興它解決了。 –