我正在将一个非常大的Rails 2.3应用程序从ruby 1.8迁移到1.9。一路上,我有一些数据库编码问题,似乎只能通过从旧的ruby-mysql
宝石移到mysql2
来解决。Ruby/Rails - 使用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)。
我想通过使用两个宝石平滑过渡 - 所有ActiveRecord
东西的mysql2
和ruby-mysql
直接客户端连接到数据库。但是,当我将两者都包含在我的应用程序的Gemfile中时,Rails似乎默认为一个或另一个。有没有办法将Gemfile配置为仅包含ruby-mysql
,但在应用程序加载时不会自动需要它?
我该如何确保两者都存在,并且只在我严格使用旧宝石的文件中使用require 'mysql'
?我还有其他方法吗?一次转换整个应用程序是一个相当大的风险,我想让我的团队有一段时间来适应并将旧代码从Mysql迁移到Mysql2。
感谢。