2009-06-04 10 views
0

誰かがacts_as_xapian_jobsテーブルの内部動作を私に説明できますか?acts_as_xapian jobsテーブル

私はそれがXapianのインデックス付きフィールドを持つオブジェクトを作成するときに、次のエラーを取得保管場所私は、最近 acts_as_xapianプラグインの問題に遭遇した

Mysql::Error: Duplicate entry 'String-2147483647' for key 2: 
INSERT INTO `acts_as_xapian_jobs` (`action`, `model`, `model_id`) 
VALUES ('update', 'String', 23730251831560) 

それはmodel_idがの最大int値を超え判明回避策は、model_idをbigintを使用するように更新することでした。 model_idはなぜ巨大なのでしょうか? acts_as_xapian_jobsの内容を見ると、索引付けされているすべてのフィールドの行が作成されているようです。 ジョブがテーブル内でどのように作成されるかを理解することは、大いに役立ちます。

ここでは、テーブルのサンプリングです:事前に

mysql> select * from acts_as_xapian_jobs limit 5\G 
*************************** 1. row *************************** 
     id: 19 
    model: String 
model_id: 23804037900560 
    action: update 
*************************** 2. row *************************** 
     id: 49 
    model: String 
model_id: 23804037191200 
    action: update 
*************************** 3. row *************************** 
     id: 79 
    model: String 
model_id: 23804037932180 
    action: update 
*************************** 4. row *************************** 
     id: 109 
    model: String 
model_id: 23804037101700 
    action: update 
*************************** 5. row *************************** 
     id: 139 
    model: String 
model_id: 23804037722160 
    action: update 

おかげで、

Amieの

答えて

1

私は最近acts_as_xapianを発見したと私はそれを周りに少しプレーしてきました。モデルが変更されるたびにacts_as_xapian_jobsテーブルが更新されるようです。次に、Xapianインデックスは実際にはrake xapian:update_indexが実行されたときに更新されます。

したがって、acts_as_xapian_jobsテーブルには、基本的にモデル内のレコードのインデックスが再インデックスされる必要があります。私の知る限りでは、モデルが変更されたときにのみレコードがテーブルに追加されるため、データベースのエントリをたくさん変更/更新していますか?これは、あなたがmax int値をオーバーフローさせた原因かもしれません。

希望すると便利です。

+0

返信ありがとうございます@Feross。これはしばらく前のことですが、正しく覚えていれば、私はacts_as_xapianのフォークバージョンを使用していましたが、元のバージョンに切り替えた後は正常に機能しました。それ以来、すばらしい仕事をしています! – Grnbeagle