Динамично подключая модель к базам данных в запущенном приложении?

PCRE не поддерживает синтаксис \uXXXX. Используйте вместо этого \x{XXXX}. См. здесь .

Ваш диапазон \u2e80-\u9fff также эквивалентен

\p{InCJK_Radicals_Supplement}\p{InKangxi_Radicals}\p{InIdeographic_Description_Characters}\p{InCJK_Symbols_and_Punctuation}\p{InHiragana}\p{InKatakana}\p{InBopomofo}\p{InHangul_Compatibility_Jamo}\p{InKanbun}\p{InBopomofo_Extended}\p{InKatakana_Phonetic_Extensions}\p{InEnclosed_CJK_Letters_and_Months}\p{InCJK_Compatibility}\p{InCJK_Unified_Ideographs_Extension_A}\p{InYijing_Hexagram_Symbols}\p{InCJK_Unified_Ideographs}

Не забудьте добавить модификатор u (/regex here/u), если вы имеете дело с UTF -8. Если вы имеете дело с другой многобайтовой кодировкой, вы должны сначала преобразовать ее в UTF-8.

7
задан Rudi Visser 27 February 2013 в 15:18
поделиться

2 ответа

Вы хотите ActiveRecord :: Base # install_connection . Вы, вероятно, захотите использовать его в абстрактном подклассе, чтобы модели, использующие ручные подключения, не мешали использованию подключения остальной частью вашего приложения:

class LogBase < ActiveRecord::Base
  self.abstract_class = true
end

class LogItem < LogBase
  ...
end

LogItem.establish_connection { ... }

LogItem.find_by_ ...

Если у вас когда-либо будет только одна модель, которая выполняет ручные подключения, абстрактный класс не нужен.

Знаете ли вы полный набор баз данных, к которым вы можете подключиться? В таком случае database.yml может быть вам полезен. Вы можете поместить всю информацию туда в виде каталога, присвоив каждой базе данных имя, а затем динамически выбрать, с какой из них установить_connection в приложении, используя эти имена:

# database.yml
atlanta:
  host: atlantadb.foo.com

# foo.rb
LogItem.establish_connection :atlanta

Установка соединений может быть довольно сложной задачей, вдвойне, если сайты разделены глобальной сетью. Я' d подумайте, имеет ли смысл использовать подход «извлечение-преобразование-загрузка» и использование ежечасного / ежедневного задания cron для копирования данных на сайт централизованной отчетности. Это самая простая форма хранилища данных и очень часто используемый подход. Если вы используете MySql, Maatkit Sync - это небольшой изящный инструмент, такой как rsync для таблиц. В качестве альтернативы вы, вероятно, используете базу данных, которая поддерживает репликацию главный-подчиненный, хотя это может быть значительно сложнее в обслуживании.

15
ответ дан 6 December 2019 в 14:09
поделиться

Rails пока не поддерживает сразу несколько баз данных (кто знает, может, никогда не поддержит). Вам придется каким-то образом перехватить соединение с базой данных в ActiveRecord для этой модели.

Здесь - документация по активной записи для этого, а здесь специфическая документация , которую вам придется переопределить.

Этот действительно хорошо объясняет процесс.

Есть также несколько полупроизводственных проектов , решающих эту проблему.

0
ответ дан 6 December 2019 в 14:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: