0

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

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

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。但它在我的环境中不起作用。

每次做gem都要重写,也不是什么大问题。但我想弄清楚为什么这对我不起作用。

我的环境是:带有 rbenv 的 ruby​​ 2.0.0-p247、bundle 1.3.5、gem 2.0.3、Ubuntu 12.04。

4

2 回答 2

2

关键行就在 spec.executables 的正上方。

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

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

于 2014-07-10T03:21:46.673 回答
1

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

spec.executables = ['MyGem']

编辑:回顾一下,kevinrivers 的回答也是有效的。仅供参考 Bundler 确实假设您使用的是 git,因此这两个答案都有效(其中还有更多答案 - 事实上,在我发布这个答案之后,我很快就深入研究了 gemspecs 的工作原理,尤其是与文件的包含有关,我写了很多关于它,如果你有兴趣 - http://chrisarcand.com/using-git-in-your-gemspec/)。

于 2014-01-22T17:39:59.210 回答