Используйте более одной базы данных в приложении Sequel - PullRequest
0 голосов
/ 21 февраля 2019

Я использую продолжение для запроса информации из разных баз данных.Использование следующего кода

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

не работает.
Это говорит мне, что platine_mass не существует в базе данных, потому что он все еще использует первое соединение.Я что-то упустил или действительно нет способа сообщить определению модели, какое соединение с базой данных использовать, если оно определено в отдельном файле.

1 Ответ

0 голосов
/ 21 февраля 2019

Вы можете указать Sequel, какую базу данных использовать для данной модели, передав аргумент Database или Dataset в Sequel::Model().В общем случае вы должны назначать объекты базы данных постоянным:

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
...