0

Необходимо подключить несколько баз данных на основе клиента.Подключение нескольких рельсов базы данных

я нашел решение, чтобы перейти на другую базу данных в модели, как,

в модели пользователя,

class User < ActiveRecord::Base 
    SupportBase.new.support_db_connection(self) 
end 

в SupportBase.rb

class SupportBase 
    def support_db_connection(model_name) 
    db_connection(model_name) 
    end 

private 

    def db_connection(model_name) 
    databases = YAML::load(IO.read('config/database_support.yml')) 
    model_name.establish_connection(databases[Rails.env]) 
    end 
end 

Это помогает мне, чтобы перейти к database_support.

Но мне нужно динамически изменять имя базы данных. Как я пройти database_name в модели пользователя к этому методу как,

SupportBase.new.support_db_connection(self,database_name) 

Или есть ли другой способ сделать это.

+0

Вы отметили версии 3, 3.2, 4 рельсов. – Nithin

ответ

0

сохранение конфигурации в одном месте database.yml

development: 
    adapter: postgresql 
    other stuff... 

production: 
    adapter: postgresql 
    other stuff.. 

external: 
..... 

Затем создайте класс

class SupportBase < ActiveRecord::Base 
    establish_connection(:external) 
    self.table_name = "your_table" 
end 

Тогда вы можете получить доступ только как

SupportBase.first 

Я думаю, что это держит альтернативное подключение к базе данных, которое может быть ood для производительности, а также позволяет использовать AR

В динамике: создайте столько окружений в database.yml, которые ассоциируются с классом. У вас будет соединение.

Проверьте мои blog для получения дополнительной информации.

Edit: На динамической нагрузки на БД, предложение, записать новые конфигурации в файл database.yml и перезагрузить файл

+0

Спасибо за сообщение. В этом случае мы можем сделать database_set «внешним» динамическим, основанным на клиенте. – Dheena

+0

@Dheena проверить мое редактирование. – Nithin

+0

Запрос от [x.example.com] должен получить данные из x_database, [y.example.com] необходимо получить данные из y_database и т. Д. Как я могу дифференцировать на основе каждого запроса в SupportBase.rb – Dheena

0

Используйте активный метод record.establish_connection для переключения между двумя БД в Rails, если у вас есть детали двух БД.

Вот код.

ActiveRecord::Base.establish_connection(
:adapter => "postgres", 
:host  => "host", 
:username => "myuser", 
:password => "mypass", 
:database => "somedatabase" 
) 
+0

Мне нужно переключиться между n номером базы данных на основе request.subdomain, есть ли способ сделать это. – Dheena

+0

Вы пробовали драгоценный камень DB-CHARMER (http://kovyrin.github.io/db-charmer/). – Sai

0

Использование ар-осьминог камень. Это будет очень полезно для этого сценария.

Смежные вопросы