我已经构建了一个ruby gem,但我需要让它可执行,以便它可以从终端运行。我用google搜索,发现我需要在bin/
目录中创建一个文件,需要我的库,然后从中调用我需要的任何内容。我还尝试chmod +x bin/myfile
使其可执行但没有任何效果。基本上,我已经遵循了这个link但没有任何效果。
在bin目录中,我已经有一个console
和setup
以及我新创建的文件,如下所示:
#!/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"]
无论何时我尝试更改可执行文件,我都会遇到构建失败的问题。知道到目前为止我还缺少什么吗?
答案 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 中,一切正常。