【问题标题】:Possible to configure models in Rails to pull data from different data sources?可以在 Rails 中配置模型以从不同的数据源中提取数据吗?
【发布时间】:2013-02-26 21:53:35
【问题描述】:

我们的应用需要从不同的数据源提取数据:一个是 MySQL 数据库,另一个是 Mongo 数据库。

是否可以配置模型以从不同的数据源中提取数据并利用 Rails.cache 进行快速查询?目前,Rails 中的配置文件似乎只支持单一数据源。

我们使用的是 Rails 3.0.6。

【问题讨论】:

标签: mysql ruby-on-rails ruby-on-rails-3 mongodb model


【解决方案1】:

Rails 提供了使用多个数据库的约定。让我向您展示如何使用 Mango 和 Mysql。

将 mysql 视为主数据库。所以mysql的配置进入config/database.yml

config/database.yml
  development:
    #dev config goes here
  test:
    #test config goes here
  production:
    #production config goes here

现在考虑 Mongo。在 config/mongo_database.yml 中为 Mongo 放置另一个配置

 config/mongo_database.yml
    development:
      #dev config goes here
    test:
      #test config goes here
    production:
      #production config goes here

现在我们将用户模型连接到mysql:

   class User < ActiveRecord::Base
     #Active record by default connects with the primary database configuration
   end

现在我们将 Product 模型连接到 Mongo:

   class Product
     include MongoMapper::Document
   end

你还需要在 config/initializers/mongo.rb 中初始化 mongo 设置

config/intializers/mongo.rb 
Mongoid.configure do |config|
  config = YAML.load_file(Rails.root.join("config", "mongo_database.yml"))[Rails.env]
  host = config["host"]
  config.master = Mongo::Connection.new.db(config["database"])
end

【讨论】:

  • 如果我们使用 mongomapper 会怎样?
  • @Crashalot 您应该阅读 mongomapper 的文档。
【解决方案2】:

是的。

对于 MySQL:

class Example < ActiveRecord::Base
  ...
end

对于 Mongo:

class ExampleTwo
  include MongoMapper::Document
  ...
end

【讨论】:

  • 那么在database.yml中,我们只是为不同的数据源设置了适配器?或者我们还需要做什么?谢谢!
  • 安装和配置 active_record 和 mongomapper(如果需要)并按照它们的设置说明进行操作。我相信 databases.yml 仅适用于 active_record 并且 mongo 有它自己的文件,但我必须查看文档才能知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-21
  • 1970-01-01
  • 2022-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多