Я занимаюсь рефакторингом некоторых функций устаревшего php-приложения, которое использует несколько баз данных с одинаковой структурой, по одной на каждый язык. Когда пользователь входит в систему, выбирает его язык, и затем все последующие соединения устанавливаются с базой данных для этого приложения с некоторым кодом, подобным этому:
$db_name = 'db_appname_' . $_SESSION['language'];
mysql_connect(...);
mysql_select_db($db_name);
Я бы хотел провести рефакторинг и базы данных, но в настоящее время это не вариант, потому что другие части программного обеспечения должны оставаться в рабочем состоянии со старой структурой, пока разрабатывается новое приложение и какое-то время после его разработки.
Я видел этот вопрос , но и вопрос, и предлагаемые гемы довольно старые, и кажется, что они не работают с Rails 3.
Какой лучший способ добиться такого поведения в моем новом приложении rails 3? Есть ли другой выбор, который позволит мне изменить структуру БД и удовлетворить мои потребности?
Последняя деталь: в приложении php даже данные для входа хранятся в отдельных таблицах, т. Е. Каждый БД имеет свою собственную таблицу пользователей, и когда пользователь входит в систему, он также передает языковой параметр в форме входа в систему. Я хотел бы использовать devis для аутентификации в новом приложении, которое, вероятно, не будет работать с этим подходом, поэтому я думаю продублировать (я знаю, это не СУХОЙ) информацию для входа в отдельную модель пользователя с атрибутом языка и отдельную базу данных, совместно используемую языками, для использования функций устройства в моем приложении. Это вызовет какие-либо проблемы?
EDIT:
Для полноты я закончил с этим конфигурационным файлом yml
production: &production
adapter: mysql
host: localhost
username: user
password: secret
timeout: 5000
production_italian:
<<: *production
database: db_app_ita
production_english:
<<: *production
database: db_app_eng
и с этим конфигом в базовой модели (на самом деле не совсем так, но для ясности)
MyModel < AR::Base
establish_connection "production_#{session[:language]}"
...
end