- 追加された行はこの色です。
- 削除された行はこの色です。
&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]
**保存済みレコードかどうかの確認 [#a1b055eb]
-new_record?を使う
item.new_record?
**複数のデータベースに接続する [#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 · 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