使ruby gem可执行

时间:2017-10-02 21:13:31

标签: ruby-on-rails ruby rubygems executable

我已经构建了一个ruby gem,但我需要让它可执行,以便它可以从终端运行。我用google搜索,发现我需要在bin/目录中创建一个文件,需要我的库,然后从中调用我需要的任何内容。我还尝试chmod +x bin/myfile使其可执行但没有任何效果。基本上,我已经遵循了这个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"]

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

2 个答案:

答案 0 :(得分:2)

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

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

bindir is optional如果您将可执行文件放在bin子目录中,因为它在rubygems/specifications.rb中默认设置  并且在可执行文件列表中是prepended to each executable

答案 1 :(得分:0)

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

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

作用:仅包含已添加到 files(由 git 在脚本中检索)的 git ls-files 用于包含到 gem 中。

所以下面的代码只会返回一个空数组:

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

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