簡體   English   中英

rufus-scheduler和多個數據庫連接

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM