是否可以使用 gems 部署非 ruby 可执行文件?

Is it possible to use gems to deploy non-ruby executables?

基本上可以使用 gems 作为可执行文件的通用包管理器并完全忽略 ruby 吗?

假设我已经创建了一个批处理脚本和一个 bash 脚本,它们可以做一些神秘的事情,这是 Ruby 无法做到的。

是否可以将它们打包成 gem 并允许用户使用 gem install 安装它们?

主要问题是虽然 gemspec 允许我提供可执行文件列表,但它假设它们是 ruby 脚本。因此 gem install 创建了一些特定于平台的包装器,归结为

$ ruby file-which-is-listed-as-executable-in-gemspec

这显然不适用于我的批处理和 bash 脚本。

我不能只创建一个 ruby 可执行文件的原因是我会失去当前环境。批处理文件设置了执行后需要保留的环境变量,并且 bash 脚本应该用 source 调用,因此它导出的变量仍然存在。使用 ruby 调用其中任何一个都将撤消所有环境变量更改,因为它们只会发生在 ruby 的进程环境中。

我考虑使用 gem 的原因是那些脚本最终会调用 ruby 可执行文件,这本质上是一个 ruby gem。我想提供环境设置助手。

经过一番挖掘,我发现答案是“差不多”。如果安装 gem 和 --no-wrapper 它可以工作然后所有可执行文件将被添加到 bin 目录中,没有包装器。这有点不愉快,但它有效。

相关问题:https://github.com/rubygems/rubygems/issues/88

又一题(和这个基本一样):Deploy a shell script with Ruby gem and install in bin directory