2015-08-14 6 views
0

В моем приложении с несколькими арендаторами в рельсах я использую несколько баз данных, и я переключаюсь один на другой с помощью ActiveRecord::Base.establish_connection(tenant_config), эта работа прекрасна. Как обрабатывать эти множественные соединения в rufus-scheduler? Нужно ли мне перебирать соединения в каждом планировщике?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 

может кто-то помочь мне лучшее решение или посоветуйте. Thx.

Я использую этот код, чтобы управлять своими несколько БД соединений

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 

ответ

0

Lambi говорит:

В моих рельсах применение многопользовательского, я использую несколько баз данных и переключаться от одного к другому с помощью ActiveRecord :: Base.establish_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 

Вы переключаетесь с .establish_connection в свой обычный код, почему бы не использовать это в ваших запланированных рабочих местах?

Обратите внимание, что rufus-scheduler наплевать на Rails или Active Record или соединения с базой данных, он просто использует потоки для выполнения своей работы по планированию. Никакой магии.

1

Я хотел бы переместить разделение соединения с базой данных для моделей. Аналогично этому article

Таким образом, диспетчеру rufus не нужно знать о соединении.

+0

да, я использую отдельный модуль для управления моих связей – lambi

-1

Я не знал, хорошо ли это для производительности! Я бы сделать это:

# for each tenant (db connection) 
    scheduler.every '1h' do 
      Tenant.each do |tconfig| 
       ActiveRecord::Base.establish_connection(tconfig) 
       MyModel.create(title: "test") 
      end 
     end 
+0

зависит от продолжительности одной операции и по количеству жильцов ... Если есть 70 арендаторов и одна операция бежит на 1 минуту ... Удачи! – jmettraux

+0

Я, наконец, использовал драгоценный камень квартиры https://github.com/influitive/apartment – lambi