以编程方式重建 ruby​​gem

问题描述

我正在尝试寻找使用 TarWriter 重建 ruby​​gem 的方法(我需要添加一个额外的文件)。此处的大多数搜索结果都是人们构建文件的 tar 存档的地方,文件内容来自 String.io 输入。我不想这样做,我只想将“data.tar.gz”、“Metadata.gz”、“checksums.yaml.gz”重建为.gem 文件并能够安装。

这是我当前存档到 .gem 中的代码

require 'rubygems/package'
require 'fileutils'

gem_files = ["data.tar.gz","Metadata.gz","checksums.yaml.gz"]

File.open('test.gem','wb') do |file|
    Gem::Package::TarWriter.new(file) do |tar|
        gem_files.each { |file| 
            tar.add_file_simple(File.basename(file),0o666,File.size(file)) do |io|
                File.open(file,'rb') { |f| io.write(f.read) }
            end
        }
    end
end

如果我然后运行 ​​gem build test.gem

$ gem install test.gem
ERROR:  While executing gem ... (ArgumentError)
    "\x80\x7F\x150n\x18\f\x0E" is not an octal string

文件看起来不错:

$ file test.gem
arch.gem: POSIX tar archive
$ tar tvf test.gem
-rw-rw-rw- user/user    4424 2021-05-05 09:57 data.tar.gz
-rw-rw-rw- user/user     846 2021-05-05 09:57 Metadata.gz
-rw-rw-rw- user/user     295 2021-05-05 09:57 checksums.yaml.gz

如果我直接使用 tar

$ tar cvf test_with_tar.gem checksums.yaml.gz data.tar.gz Metadata.gz
checksums.yaml.gz
data.tar.gz
Metadata.gz
$ file test_with_tar.gem
arch.gem: POSIX tar archive

效果很好:

$ gem install test_with_tar.gem
Successfully installed hello-world-rubygems-0.1.0
Parsing documentation for hello-world-rubygems-0.1.0
Done installing documentation for hello-world-rubygems after 0 seconds
1 gem installed

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)