Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中连接到多个数据库_Ruby On Rails_Database_Connection - Fatal编程技术网

Ruby on rails 在RubyonRails中连接到多个数据库

Ruby on rails 在RubyonRails中连接到多个数据库,ruby-on-rails,database,connection,Ruby On Rails,Database,Connection,我有一个RubyonRails应用程序运行良好,并连接到数据库。现在我想从同一个应用程序连接到另一个数据库。数据模型可以完全相同。事实上,如果我连接到不同的数据库,应用程序工作正常。但是,我想连接到两个不同的数据库。在ruby on rails中可以吗?用于切换到其他数据库: ActiveRecord::Base.establish_connection( :adapter => "mysql", :host => "localhost", :username

我有一个RubyonRails应用程序运行良好,并连接到数据库。现在我想从同一个应用程序连接到另一个数据库。数据模型可以完全相同。事实上,如果我连接到不同的数据库,应用程序工作正常。但是,我想连接到两个不同的数据库。在ruby on rails中可以吗?

用于切换到其他数据库:

ActiveRecord::Base.establish_connection(
  :adapter  => "mysql",
  :host     => "localhost",
  :username => "myuser",
  :password => "mypass",
  :database => "somedatabase"
)
您还可以通过database.yml传递预配置的环境,如下所示:

ActiveRecord::Base.establish_connection(ActiveRecord::Base.configurations['other_env'])
您还可以为特定模型设置它:

MyClass.establish_connection(...)

对于多数据库连接,需要将以下代码添加到database.yml文件中。这里,我给出了从rails应用程序连接两个数据库的示例

config/database.yml

development:
  adapter: mysql2
  database: db1_dev
  username: root
  password: xyz
  host: localhost

development_sec:
  adapter: mysql2
  database: db2_dev
  username: root
  password: xyz
  host: localhost

production:
  adapter: mysql2
  database: db1_prod
  username: root
  password: xyz
  host: your-production-ip

production_sec:
  adapter: mysql2
  database: db2_prod
  username: root
  password: xyz
  host: your-production-ip
在这里,我使用了两个数据库作为开发和生产环境

现在我们需要将模型连接到数据库。在开发和生产模式下运行应用程序时,所有模型都将通过database.yml中提到的开发和生产数据库参数进行映射。所以对于某些模型,我们需要连接到其他数据库

让我们假设,我们有两个模型用户和类别。users表位于db1_dev和db1_prod中,categories表位于db2_dev和db2_prod中

类别模型

class Category < ActiveRecord::Base
  establish_connection "#{Rails.env}_sec".to_sym
end
类别
类似地,在为第二个数据库添加新迁移时,需要向其中添加以下代码

class CreateRewards < ActiveRecord::Migration
  def connection
    ActiveRecord::Base.establish_connection("#{Rails.env}_sec".to_sym).connection
  end

  def change
    # your code goes here.
  end
end
class CreateRewards

希望它对您有用:)。

可能的副本:在Rails 5.1上,我必须用符号表示连接名称<代码>建立连接“#{Rails.env}{u sec”。对于没有符号化的_sym
,我得到了错误
ActiveRecord::AdapterNotSpecified:数据库配置没有指定adapter1。
谢谢!连接到活动记录类之外的单独数据库需要
ActiveRecord::Base.configurations['other_env']
,否则它实际上不会加载配置。