使 ruby gem 可执行
Make ruby gem executable
我已经构建了一个 ruby gem,但我需要使其可执行,以便它可以从终端 运行。我用谷歌搜索,发现我需要在 bin/
目录中创建一个文件,需要我的库,然后从中调用我需要的任何内容。我也尝试 chmod +x bin/myfile
使其可执行,但没有任何效果 worked.Basically,我已经遵循了这个 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"]
每当我尝试更改可执行文件时,我都会遇到构建失败的问题。知道到目前为止我还缺少什么吗?
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,一切正常。
我已经构建了一个 ruby gem,但我需要使其可执行,以便它可以从终端 运行。我用谷歌搜索,发现我需要在 bin/
目录中创建一个文件,需要我的库,然后从中调用我需要的任何内容。我也尝试 chmod +x bin/myfile
使其可执行,但没有任何效果 worked.Basically,我已经遵循了这个 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"]
每当我尝试更改可执行文件时,我都会遇到构建失败的问题。知道到目前为止我还缺少什么吗?
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,一切正常。