0

我有一段代码可以执行另一个类的 zip 命令:

def zip_up_contents path name
  Zipper.new path name
end

问题是它压缩了传递给它的所有文件的空白副本。但是当我像这样在 zip 命令之前放置一个绑定时:

def zip_up_contents path name
  binding.pry
  Zipper.new path name
  binding.pry
end

它成功压缩文件。我通过在有和没有第一个绑定存在的情况下从第二个绑定点上的 pry 中检查结果文件的字节大小来知道这一点。如果没有绑定,zip 存档的字节大小是它应该的一半,而有了绑定,它就是我期望的大小。

“Zipper”类只是用反引号调用系统 zip。我认为这不是问题,因为我在其他情况下使用该类没有问题。zip 实用程序是 Ubuntu 10.04 上的 Zip 3.0。

我不知道为什么绑定的存在会有所不同。如果有人遇到过类似的事情,或者有关于如何更好地调试问题的想法,我会很高兴听到它。

编辑:对于遇到类似情况的任何人,我通过在压缩文件之前调用 fsync 解决了这个问题:http ://www.ruby-doc.org/core-2.0.0/IO.html#method-i-fsync

4

1 回答 1

0

上周我在一些 Rspec 测试中遇到了这个问题——结果证明这是一个竞争条件。当您将文件传递到压缩文件时,是否有可能没有保存文件?我的意思是,也许这binding.pry只是给它一个追赶的机会。

于 2013-10-13T17:31:05.937 回答