Интерфейс TokyoCabinet Ruby C не может быть загружен - PullRequest
1 голос
/ 05 марта 2010

Я использую официальный интерфейс Ruby C Ruby и не могу bzip работать. Он собирался с поддержкой bzip, ./configure сказал:

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')

Что еще хуже, это то, что если я попробую предварительный выпуск Oklahoma Mixer (пример следующий - хотя у меня нет репутации, чтобы добавить новый тег), он сжимается нормально. Когда я включил некоторую отладку в ее вызов 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 Ответ

1 голос
/ 05 марта 2010

Это злая, тонкая ошибка. Я пропустил запятую в вызове tune () и написал -1 -1 вместо -1, -1. Все аргументы необязательны, так что это было тихо, не bzipping. Argh.

...