&tag(ActiveRecord);
*目次 [#t9585ef4]
#contents
*参考情報 [#xd595ebe]
-[[読書メモ+tips+日記:[Ruby] ActiveRecord を単体で(Railsアプリの外で)使う:http://blog.livedoor.jp/takaaki_bb/archives/50602246.html]]
-[[ActiveRecord を 単独で使う例: katoy: cocolog:http://youichi-kato.cocolog-nifty.com/blog/2008/06/activerecord_0c49.html]]

*Tips [#za8f7a18]
**複数のデータベースに接続する [#jdc8bc0c]
-ActiveRecord::Baseを継承したクラスでestablish_connectionをそれぞれ設定する。
#pre{{

class OldPerson < ActiveRecord::Base
  self.table_name = 'person'
  self.inheritance_column = :old_type
  self.establish_connection(:adapter=>"mysql2",:host=>"localhost",:username=>$dbuser,:password=>$dbpasswd,:data\
base=>$olddbname)

end

class Person < ActiveRecord::Base
  self.inheritance_column = :old_type
  self.establish_connection(:adapter=>"mysql2",:host=>"localhost",:username=>$dbuser,:password=>$dbpasswd,:data\
base=>$newdbname)
end
}}

**type列がエラーになる [#k2b54f44]
-self.inheritance_column = :old_typeのようにして回避する
#pre{{
class OldPerson < ActiveRecord::Base
  self.table_name = 'person'
  self.inheritance_column = :old_type
end
}}


**大量のINSERTを早くする [#j333ff18]
***バックエンドのDB設定をチューニングする [#efef9ed0]
-MySQLの場合my.cnfでinnodb_buffer_pool_sizeなどをいじる。
#pre{{
innodb_buffer_pool_size = 512M
innodb_log_file_size = 128M
}}

***transactionを使う [#ub5ccc1e]
-saveなどをActiveRecord::Base.transaction do endで囲むとCOMMIT回数が減らせるので早くなる。

***activerecord-import [#bd26a5c1]
-[[zdennis/activerecord-import &#183; GitHub:https://github.com/zdennis/activerecord-import]]を使う。MySQLの高速化した(圧縮された)INSERT文を生成してくれる。これが一番効果あった。


**SQLを表示する [#x2a1fe33]
-loggerを使う。
#pre{{
require 'logger'
ActiveRecord::Base.logger = Logger.new(STDOUT)
}}


*トラブルシューティング [#i49c62fd]
** 「[deprecated] I18n.enforce_available_locales will default to true in the future」というメッセージ [#gb82f542]
-RailsではなくActiveRecord単体で使った時に表示されるようになった。スクリプトのどこかに以下を追加すればとりあえず回避できる。
 I18n.enforce_available_locales = false


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS