我有一段代码可以执行另一个类的 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