【问题标题】:Is it possible to use gems to deploy non-ruby executables?是否可以使用 gems 来部署非 ruby​​ 可执行文件?
【发布时间】:2020-11-06 09:05:46
【问题描述】:

基本上是否可以将 gems 用作可执行文件的通用包管理器而完全忽略 ruby​​?

假设我创建了一个批处理脚本和一个 bash 脚本,它们可以做一些神秘的事情,而这在 Ruby 中是不可能做到的。

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

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

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

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

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

我完全考虑 gem 的原因是这些脚本最终确实调用了 ruby​​ 可执行文件,而这本质上是一个 ruby​​ gem。我想提供环境设置助手。

【问题讨论】:

    标签: rubygems


    【解决方案1】:

    经过一番挖掘,我发现答案是“几乎”。如果使用--no-wrapper 安装gem,它就可以工作,那么所有可执行文件都将被添加到bin 目录中而没有包装器。这有点令人不快,但它确实有效。

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多