2009-06-04 38 views
0

有人可以向我解释acts_as_xapian_jobs表的内部工作吗?acts_as_xapian工作表

我跑进与acts_as_xapian插件的问题,最近,我在那里一直得到以下错误,当它创建与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值2147483647.解决方法是更新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 

由于提前,

阿米

回答

1

我最近发现acts_as_xapian,我一直玩了一点。看起来acts_as_xapian_jobs表格在任何时候模型改变时都会更新。然后,Xapian索引实际上在下次运行时更新rake xapian:update_index

因此,acts_as_xapian_jobs表基本上只包含模型中需要重新编制索引的记录的ID。据我所知,只有在模型发生变化时才会将记录添加到表格中,因此 - 您是否更改/更新数据库中的大量条目?这可能就是为什么你溢出了最大的int值。

希望这会有所帮助!

+0

感谢@Feross的回复。这是前一段时间,如果我没有记错,我使用的是acts_as_xapian的分叉版本,并且在切换到原始版本后它工作正常。从那以后它一直在努力! – Grnbeagle 2010-03-12 15:44:06