Gem :: Specification.executables与`bundle gem`命令创建的不匹配

时间:2013-09-13 18:15:44

标签: ruby gem

我正在学习如何制作宝石文件。

通过使用bundle gem foo,我创建了一个“hello world”宝石。 如果我指定可执行文件名,它可以正常工作。

Gem::Specification.new do |spec|
  spec.executables   = "foo"
end

但默认Gem::Specification.executables设置如此。

Gem::Specification.new do |spec|
  spec.executables   = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
end

我认为这个方法可以找到bin目录下的所有文件。但它在我的环境中不起作用。

每次制作宝石都要重写它并不重要。 但是我想说明为什么这对我不起作用。

我的环境是: ruby 2.0.0-p247与rbenv, 捆绑1.3.5, 宝石2.0.3, Ubuntu 12.04。

2 个答案:

答案 0 :(得分:2)

关键行位于spec.executables上方。

 spec.files         = `git ls-files -z`.split("\x0")

Git用于列出文件,如果你没有提交bin /,文件列表就不会改变,因此你的可执行文件不会被构建和添加。

答案 1 :(得分:1)

我也有这个问题。虽然看似直观,但它似乎根本不适合我。但是,看看GitHub上的其他宝石,看起来你可以只指定gem本身并使用默认的/ bin目录

spec.executables = ['MyGem']
编辑:回顾一下,kevinrivers的回答也是有效的。 FYI Bundler确实假设你正在使用git,所以这两个答案都有效(实际上,在我发布这个答案后,我很快就挖掘了gemspecs的工作原理,特别是与文件的包含有关,我写了很多关于它,如果你有兴趣 - http://chrisarcand.com/using-git-in-your-gemspec/)。