如何将zlibwapi合并到Windows服务器上的Ruby项目中?

m4pnthwp  于 2023-06-22  发布在  Ruby
关注(0)|答案(1)|浏览(138)

我在Windows 10服务器上继承了一个ruby项目,该项目使用zlib压缩和加密要备份的文件。
一些较大的文件返回数据错误“字符串大小太大”。
我怀疑这是一个32位的问题,并看到有zlibwapi可用,这是64位,但我还没有能够找出如何纳入它。
简单地尝试要求文件给出“cannot load such file”错误,并且将zlibwapi交换为ruby的bin文件夹中的zlib1会触发zlib.so错误。
我对ruby完全陌生,如果有任何建议,我会很感激的。

**编辑:**这是traceback中的具体一行:

compressed_data = Zlib::Deflate.deflate(data)

以及确切的错误消息:

deflate: string size too big (ArgumentError)
deflate: data error (Zlib::DataError)
xnifntxz

xnifntxz1#

能够通过将字符串切成块并迭代这些块来压缩整个字符串来解决:

compressed_data = String.new
z = Zlib::Deflate.new
data.each_char.each_slice(1024) do |chunk|
    compressed_data << z.deflate(chunk.join, Zlib::SYNC_FLUSH)
end
z.finish
z.close

类似于inflate:

data = String.new
z = Zlib::Inflate.new
begin
    compressed_data.each_char.each_slice(1024) do |chunk|
        data << z.inflate(chunk.join)
    end
rescue Zlib::DataError => e
    puts "Error: #{e.message}"
    return nil
ensure
    z.close
end

if data.nil?
    puts "Failed to inflate the data"
end

最初在测试充气时,我在最终确定时遇到缓冲错误;然而,上面的块确实起作用。

相关问题