Ruby on rails 在RubyonRails中连接到多个数据库
我有一个RubyonRails应用程序运行良好,并连接到数据库。现在我想从同一个应用程序连接到另一个数据库。数据模型可以完全相同。事实上,如果我连接到不同的数据库,应用程序工作正常。但是,我想连接到两个不同的数据库。在ruby on rails中可以吗?用于切换到其他数据库: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
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']
,否则它实际上不会加载配置。