подключить приложение рельсы ко многим базам данных - PullRequest
0 голосов
/ 15 мая 2011

Допустим, у меня есть пользователи, и каждый пользователь принадлежит какой-то группе.Из соображений безопасности я хочу иметь отдельную базу данных для каждой группы.Я предполагаю, что объекты User и Group хранятся в одной центральной базе данных, и аутентификация выполняется для этой базы данных, но все другие объекты динамически подключаются к другой базе данных, которая определена в объекте Group.

Итак, вопрос в том, как мне динамически подключаться к другой базе данных с моим объектом в зависимости от некоторых параметров (например, dbname)?

Ответы [ 2 ]

1 голос
/ 15 мая 2011

вы можете использовать метод класса "create_connection", но, если честно, я не знаю, можно ли его вызывать динамически каждый раз, когда вам нужно.Я использую его для моделей, которые подключаются к разным базам данных следующим образом:

class SomeModel < ActiveRecord::Base
  establish_connection "second_#{Rails.env}"
end

database.yml:

development:
  adapter: mysql2
  username: web
  password:
  database: first_db
  pool: 5

second_development:
  ...
  database: second_db
  pool: 5

Насколько я знаю, установить соединение можно также вызывать прямо с помощью Hashсодержащий параметры из database.yml, например,

establish_connection { :username => "web", :database => "..." }

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

Я тоже так используюкогда я пишу скрипт вне rails (просто чистый ruby ​​с включением activerecord), а затем подключаюсь к db вручную.

Надеюсь, это поможет.

С уважением, NoICE

0 голосов
/ 19 сентября 2012

Используйте MultiConfig драгоценный камень, который я создал, чтобы сделать это легко.

Вы можете указать конфиги в отдельном файле, например second.yml и т. Д., А затем вызвать:

ActiveRecord::Base.config_file = 'second' # for all models

или

SomeModel < ActiveRecord::Base
    self.config_file = 'second'
end

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...