是否可以使用 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
基本上可以使用 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