在Sequel应用程序中使用多个数据库

时间:2019-02-21 13:59:35

标签: ruby sequel

我正在使用续集来查询来自不同数据库的信息。使用以下代码

Cypress.log({ name: 'debug', message: length })

很棒。但是,如果我尝试将模型定义放在单独的文件中,以便在需要时需要它们,则似乎只有第一个数据库连接有效。 因此,将上面的代码更改为

Sequel.connect(mmt018_db_connection_settings) do |db|
  class ResultPlacementAssign < Sequel::Model(db[:result_placement_assign]); end
  # do something with 'ResultPlacementAssign'
end

Sequel.connect(mmt024_db_connection_settings) do |db|
  class PlatineMass < Sequel::Model(db[:platine_mass]); end
  # do something with 'PlatineMass'
end

使用模型定义

Sequel.connect(mmt018_db_connection_settings) do |db|
  require File.join(__dir__, 'models', 'm_mt_018', 'ResultPlacementAssign.rb')
  # do something with 'ResultPlacementAssign'
end

Sequel.connect(mmt024_db_connection_settings) do |db|
  require File.join(__dir__, 'models', 'm_mt_024', 'PlatineMass.rb')
  # do something with 'PlatineMass'
end

class ResultPlacementAssign < Sequel::Model(:result_placement_assign)
end

不起作用。
它告诉我class PlatineMass < Sequel::Model(:platine_mass) end 在数据库中不存在,因为它仍在使用第一个连接。 我是否缺少某些内容,或者是否真的没有办法告诉模型定义要使用的数据库连接(如果它是在单独的文件中定义的)。

1 个答案:

答案 0 :(得分:0)

通过将数据库或数据集参数传递给Sequel::Model(),可以告诉Sequel给定模型使用哪个数据库。通常,您应该将数据库对象分配给常量:

DB1 = Sequel.connect(mmt018_db_connection_settings)
DB2 = Sequel.connect(mmt024_db_connection_settings)
class ResultPlacementAssign < Sequel::Model(DB1[:result_placement_assign]); end
class PlatineMass < Sequel::Model(DB2[:platine_mass]); end