非常に大きなRails 2.3アプリケーションをRuby 1.8から1.9に移行しています。途中で、私はいくつかのデータベースエンコーディングの問題を抱えていたようですが、これは古いruby-mysql
の宝石からmysql2
に移動することによってのみ解決することができました。Ruby/Rails - ruby-mysqlとmysql2の両方で作業する
これはすべてのActiveRecord::Base
ORMのようなクエリ(@users = User.find(:all, :conditions => {...})
など)でうまく機能しましたが、アプリケーションはパフォーマンス関連の問題について直接DBにクエリすることにも大きく依存しています。私は、このクエリが書か指定されたクラスファイルに主に行われていることに注意してください
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はどちらか一方にデフォルト設定されているようです。 ruby-mysql
のみを含めるようにGemfileを設定する方法はありますが、アプリの読み込み時に自動的には必要としませんか?
両方とも存在することを確認するには、どうすれば私が厳密に古いgemを使いたいファイルにrequire 'mysql'
を使用すればよいですか?私が取るべき他のアプローチはありますか?アプリケーション全体を1つのストロークから変換することはかなり危険です。私は、私のチームがMysqlからMysql2に古いコードを適応させて移行することを可能にしたいと思います。
ありがとうございました。