2010-03-04 17 views
1

我正在使用Ruby官方Ruby C界面,並且無法使用bzip工作。它沒有建立與支持的bzip,的./configure說:TokyoCabinet的Ruby C界面不能bzip

checking bzlib.h usability... yes 
checking bzlib.h presence... yes 
checking for bzlib.h... yes 

所以我寫了,只是寫一個條目來兩個文件,一個據稱bzip'd和一個不是這個示例程序。兩者都不是壓縮的;除了最後的簡單文件大小測試之外,我可以編輯with_bzip.tcb 文件並在那裏查看原始字符串文本。

require 'tokyocabinet' 
include TokyoCabinet 

def write filename, options 
    File.unlink filename if File.exists? filename 
    bdb = BDB::new 
    bdb.tune(0, 0, 0, -1 -1, options) or raise "Couldn't tune" 
    bdb.open(filename, BDB::OWRITER | BDB::OCREAT | BDB::OLCKNB) or raise "Couldn't open" 
    bdb["test"] = "This string should be compressed and not appear raw.\n" * 10000 
    bdb.close 
end 

write 'without_bzip.tcb', 0 
write 'with_bzip.tcb', BDB::TBZIP 
puts "Not actually compressed" unless File.size('with_bzip.tcb') < File.size('without_bzip.tcb') 

是什麼使情況變得更糟的是,如果我嘗試俄克拉荷馬攪拌機(下面的例子 - 雖然我沒有信譽添加新標籤)的預覽版,它壓縮的罰款。當我在try()調用中加入一些調試時,它似乎會調用相同的調用(0,0,0,-1,-1,4)。我完全難住 - 任何人都可以告訴我上面的代碼做錯了什麼?

require 'oklahoma_mixer' 
OklahomaMixer.open("minimal_om.tcb", :opts => 'lb') do |db| 
    db["test"] = "This string should be compressed and not appear raw.\n" * 10000 
end 

回答

1

這是一個邪惡的,微妙的錯誤。我在tune()調用中忽略了一個逗號,並寫入了-1 -1而不是-1,-1。所有的參數都是可選的,所以它並沒有冷靜。哎呀。