微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

以编程方式重建 ruby​​gem

如何解决以编程方式重建 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 举报,一经查实,本站将立刻删除。