【问题标题】:Using two database in Rails?在 Rails 中使用两个数据库?
【发布时间】:2012-12-31 11:26:03
【问题描述】:

是否可以在 Rails 应用程序中使用两种类型的数据库?

我正在使用 2 个数据库 - Postgres 来存储可能变化不大的数据,以及 MongoDB 存储动态变化的数据。

这是有效的方法吗?是否可以在这两个数据库之间连接并操作 在单个 Rails 应用程序中?

如果我错了,请指正。

问候, 巴兰

【问题讨论】:

  • 通过搜索网络,我找到了一个解决方案stackoverflow.com/questions/1825844/multiple-databases-in-rails,但指定的注释提到了首先坚持单个数据库并使用适配器建立与第二个数据库的连接.. 但我想要的是拥有这 2 个数据库在 Rails 应用程序中配置,以便我可以执行正常的过程,例如使用迁移创建表、使用模型更新表等,
  • 所以你是说这种方法不对?如果是这样,您可以在回答中添加此注释以及相关参考。
  • 是的,我已经这样做了,而且非常简单。

标签: ruby-on-rails postgresql mongodb


【解决方案1】:

是的,这是可能的,这是我旧代码中的一个示例(但这里我们将 mysql 用于两个数据库,但我认为您可以了解)

在database.yml文件中定义两个数据库

development: &defaults
  adapter: mysql
  encoding: utf8
  database: DB1
  enable_call: true
  username: 
  password: 
  host: 

portal_development: &defaults
  adapter: mysql
  encoding: utf8
  database: DB2
  enable_call: true
  username: 
  password: 
  host: 

在您的模型中必须将基础模型与上述数据库相结合

portal_base.rb

class PortalBase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection "portal_#{Rails.env}"

  def self.table_name_prefix
    "DB1."
  end
end

default_base.rb

class DefaultBase < ActiveRecord::Base

  self.abstract_class = true

  establish_connection "#{Rails.env}"

  def self.table_name_prefix
    "DB2."
  end

end

并相应地导出您的模型

class Client < PortalBase
  #code
end

希望你现在有一个想法:)

【讨论】:

  • 只有 Rails3 才有可能吗?
  • 没试过,但应该可以
【解决方案2】:

找到解决方案:

我们可以使用mongoid gem 来实现。

安装步骤

1) 通过在 Gemfile 中添加 "gem mongoid" 并运行 bundle 命令来安装 mongoid

2) 输入 "rails g mongoid:config" 生成 mongoid 配置,这将创建一个 配置文件mongoid.yml 靠近database.yml 文件,您可以将配置添加到Mongo服务器 在这个文件中。

注意:添加Mongoid后,所有创建的模型都会默认为MongoDB创建,你可以指定--orm选项为Postgres生成模型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-15
    相关资源
    最近更新 更多