我有一段代码从另一个类执行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
答案 0 :(得分:0)
我上周在一些Rspec测试中遇到了这个问题 - 结果证明是竞争条件。将文件传递给压缩文件时是否有可能保存文件?我的意思是,也许binding.pry
只是让它有机会赶上来。