[英]rufus-scheduler and multiple databases connections
在我的Rails多租戶應用程序中,我使用多個數據庫,並使用ActiveRecord::Base.establish_connection(tenant_config)
從一個數據庫切換到另一個數據庫,這一工作正常。 如何處理rufus-scheduler中的多個連接? 我是否必須迭代每個調度程序中的連接?
#not work
scheduler.every '1h' do
MyModel.create(title: "test")
end
也許像這樣:
scheduler.every '1h' do
active_records_all_connections.each do
MyModel.create(title: "test")
end
end
有人可以幫助我提供更好的解決方案或建議。 謝謝。
我使用此代碼來管理多個數據庫連接
module DatabaseSwitching
def choose_database_from_tenant(tenant)
unless defined? @@_client_database_details
@@_client_database_details = Hash.new
end
if @@_client_database_details[tenant].nil?
@@_client_database_details[tenant] = fetch_tenant_database_for tenant
end
connect_to_database_for @@_client_database_details[tenant]
end
def fetch_tenant_database_for(tenant)
file_path = "#{Rails.root}/config/databases/database.yml"
raise ActionController::RoutingError.new('Not Found') unless tenant
tenant_db = "database_" + tenant
if @file_to_load != File.ctime(file_path)
@details = YAML.load_file(file_path)[tenant_db]
@file_to_load = File.ctime(file_path)
raise ActionController::RoutingError.new('Not Found') unless @details
end
@details
end
def connect_to_database_for(details)
ActiveRecord::Base.establish_connection(details)
end
end
我將數據庫連接分離移至模型。 與本文相似
這樣,rufus調度程序就無需了解連接。
蘭比說:
在我的Rails多租戶應用程序中,我使用多個數據庫,並使用ActiveRecord :: Base。Establishment_connection(tenant_config)從一個數據庫切換到另一個數據庫
因此,只需執行以下操作:
scheduler.every '1h' do
ActiveRecord::Base.establish_connection(tconfig0)
MyModel.create(title: "test for tenant0")
end
scheduler.every '1h' do
ActiveRecord::Base.establish_connection(tconfig1)
MyModel.create(title: "test for tenant1")
end
您在常規代碼中使用。Establishment_connection進行切換,為什么不在計划的作業中使用它?
請注意,rufus-scheduler不會對Rails或Active Record或數據庫連接產生任何影響,它只是使用線程來完成其調度工作。 沒魔術
我不知道這是否對性能有好處! 我會這樣做的:
# for each tenant (db connection)
scheduler.every '1h' do
Tenant.each do |tconfig|
ActiveRecord::Base.establish_connection(tconfig)
MyModel.create(title: "test")
end
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.