命令行实用工具宝石如何工作?

时间:2013-11-19 10:40:14

标签: ruby rubygems

像“rails”,“rspec”和“cucumber”这样的宝石如何允许用户使用以宝石名称开头的命令?

rails new project
rspec spec
cucumber features

并非所有宝石都具备此功能。例如,当我输入json时,即使我安装了它,我也会

-bash: json: command not found

3 个答案:

答案 0 :(得分:4)

rubygems.org documentation建立宝石:

  

除了提供Ruby代码库之外,gems还可以公开   一个或多个可执行文件到shell的PATH。可能是最好的   已知的例子是rake。另一个非常有用的是   prettify_json.rb,包含在JSON gem中,它在a中格式化JSON   可读的方式(并包含在Ruby 1.9中)。

     

[...]

     

向gem添加可执行文件是一个简单的过程。你只需要   将文件放在gem的bin目录中,然后将其添加到   gemspec中的可执行文件列表。让我们为Hola gem添加一个。

     

[...]

     

可执行文件本身只需要一个shebang就可以搞清楚   运行它的程序是什么。

     

[...]

     

所有它正在加载gem,并传递第一个命令   行参数作为与你打招呼的语言。

答案 1 :(得分:4)

Gem的.gemspec文件如下所示:

Gem::Specification.new do |s|
  s.name = "haml"
  s.version = "3.1.8"

  ....

   s.executables = ["haml", "html2haml"]
end

这意味着在安装此Gem(在本例中为haml-3.1.8)时,还会为文件hamlhtml2haml创建可执行文件(也称为“binstubs”)的链接。在gem的bin /目录中找到。

在这种情况下,例如文件bin/haml可能如下所示:

#!/usr/bin/env ruby
require 'rubygems'
require 'haml'

puts Haml::VERSION

答案 2 :(得分:1)

这些宝石具有可以从CLI执行的二进制文件。大多数宝石不需要此功能,只提供代码扩展。

编辑:他们可能不是'二进制文件'。它们也可以只是可执行的Ruby代码。谢谢@holger