Чтение из одной базы данных и запись в другую в Rails 2.3
Последователи базы данных Heroku довольно крутые. Они позволяют вам создать отдельную базу данных, которая автоматически синхронизируется с вашей основной БД.
Я хочу использовать эту технологию для доступа к моей базе данных последователей вместо основной базы данных для дорогостоящих операций чтения (но, очевидно, я всегда хочу записывать в основную базу данных)
Можно ли получить доступ к обеим базам данных (основной для записи и последователь для чтения), пока я нахожусь в моей производственной среде? Мой идеальный API был бы что-то вроде Post.use_db(:follower).find(1)
или же Post.find(1, :use_db => :follower)
?
1 ответ
DbCharmer был приостановлен
За последние 2 года (при попытке сделать DbCharmer совместимым с Rails 4.0) стало все более и более очевидным, что я просто больше не хочу этого делать. Мне не нужен DbCharmer для поддержки Rails 4.0+, хотя совершенно очевидно, что он нужен многим пользователям, и постоянное нытье в проблемах и списке рассылки, просьбы об обновлениях вызвали у меня много беспокойства, беспокойства, которого я не мог сделать много о (наихудший вид). В результате, поскольку я просто не вижу веских причин продолжать сражаться в этом тяжелом сражении (а разработка подобных вещей для ActiveRecord - это постоянное сражение!), Я официально сдаюсь. прочитайте больше
Макара может быть альтернативой: https://github.com/taskrabbit/makara
Оригинальный ответ
Насколько я знаю, Rails не предлагает эту функцию из коробки. Однако я нашел камень под названием db-charmer, который, кажется, очень близок к тому, что вы ищете.
Вот лучшая часть (Per-Query Connection Management):
Иногда у вас есть выбранные запросы, которые, как вы знаете, вы хотите запустить на мастере. Это может произойти, например, когда вы только что добавили некоторые данные, и вам нужно прочитать их обратно, и вы не уверены, что он дошел до ведомого или нет. Для этой и некоторых других ситуаций есть набор методов, которые мы добавили в модели ActiveRecord:
User.on_master.find_by_activation_code(code)
on_slave - этот метод используется для принудительного выполнения запроса на подчиненном устройстве даже в тех случаях, когда он был ранее вынужден использовать мастер. Если есть более одного ведомого, один будет выбран случайным образом. Этот метод также имеет две формы: блок и прокси.
on_db(соединение) - этот метод делает возможными два предыдущих метода. Он используется для переключения соединения модели на несколько дБ для короткого блока кода или даже для одного оператора (две формы). Он принимает тот же диапазон значений, что и метод switch_connection_to. Пример:
Comment.on_db(:olap).count
Post.on_db(:foo).find(:first)