Я перевожу очень большое приложение Rails 2.3 с ruby 1.8 на 1.9. Попутно у меня были некоторые проблемы с кодировкой базы данных, которые, казалось, могли быть решены только путем перехода от старого ruby-mysql
гема к mysql2
.
Это отлично работает для всех ActiveRecord::Base
ORM-подобных запросов (@users = User.find(:all, :conditions => {...})
и т. Д.), Но приложение также в значительной степени полагается на запрос к БД напрямую для некоторых проблем, связанных с производительностью. Довольно часто можно увидеть такие вещи:
ActiveRecord::Base.connection.execute(optimized_sql).each_hash do |row|
# do some stuff with row
end
OR
# for specific connections (different servers, etc)
client = Mysql.real_connect(host, username, password, schema)
client.query(tweaked_sql).each_hash do |row|
# do some stuff with row
end
OR
# for batch inserts
client.autocommit(false)
insert_list.each { |insert| client.query(insert) }
client.commit
Я должен отметить, что этот запрос в основном выполняется в специально предназначенных для этого файлах классов, а не в контроллерах, моделях и т. П., Но в основном для вещей, находящихся под app_root/lib/
. Я также не могу найти много эквивалентных вещей, которые я использовал в старом драгоценном камне. Хорошим примером является #autocommit
-подобный метод (для включения пакетных запросов, например, нескольких INSERT).
Я бы хотел сгладить переход, используя оба гема - mysql2
для всех ActiveRecord
вещей и ruby-mysql
для прямого подключения клиента к базе данных. Тем не менее, когда я включаю оба в Gemfile моего приложения, Rails кажется по умолчанию для одного или другого. Есть ли способ настроить Gemfile, чтобы он включал только ruby-mysql
, но не требовал его автоматически при загрузке приложения?
Как я могу убедиться, что оба присутствуют, и использовать require 'mysql'
только в тех файлах, где я строго хочу использовать старый гем? Есть ли какой-то другой подход, который я должен использовать? Преобразование всего приложения в одно движение - довольно большой риск, и я хотел бы дать возможность моей команде некоторое время адаптировать и перенести старый код из Mysql в Mysql2.
спасибо.