我正在学习如何制作宝石文件。
通过使用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。
答案 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/)。