使 ruby gem 可执行

Make ruby gem executable

我已经构建了一个 ruby gem,但我需要使其可执行,以便它可以从终端 运行。我用谷歌搜索,发现我需要在 bin/ 目录中创建一个文件,需要我的库,然后从中调用我需要的任何内容。我也尝试 chmod +x bin/myfile 使其可执行,但没有任何效果 worked.Basically,我已经遵循了这个 link 但没有任何效果。

在bin目录下,我已经有了consolesetup以及我新建的文件如下:

#!/usr/bin/env ruby

require "sys_libs"
s = SysLibs

这是 .gemspec 文件:

spec.files         = `git ls-files -z`.split("\x0").reject do |f|
    f.match(%r{^(test|spec|features)/})
  end
spec.bindir        = "exe"
spec.executables   = spec.files.grep(%r{^bin/}) { |f| f[3..-1] }
spec.require_paths = ["lib"]

每当我尝试更改可执行文件时,我都会遇到构建失败的问题。知道到目前为止我还缺少什么吗?

spec.bindir = "exe" 属性应为 spec.bindir = 'bin'

spec.bindir        = 'bin'
spec.executables   = ['myfile']

bindir is optional if you place your executables in a bin subdirectory, because it is set by default in rubygems/specifications.rb 并且在可执行文件列表中 prepended to each executable

我只是偶然发现了同样的问题,对我来说,罪魁祸首是如何定义包含在 gem 中的文件(这是捆绑程序生成的标准样板):

spec.files         = `git ls-files -z`.split("\x0").reject do |f|
  f.match(%r{^(test|spec|features)/})
end

这是做什么的:仅包含已添加到 git(由 git ls-files 在脚本中检索)的 files 用于包含到 gem .

所以下面将只是 return 一个空数组:

spec.executables   = spec.files.grep(%r{^bin/}) { |f| f[3..-1] }

有一次,我将可执行脚本添加到 git,一切正常。