Ruby Gem命令行工具

时间:2014-01-24 21:24:24

标签: ruby-on-rails ruby gem

我正在尝试构建命令行 。我使用bundler来创建gem并在本地安装gem。它生成了所需的目录。我还能测试,如果我需要我的 Gem ,我可以使用它里面的方法。我正在尝试让命令行工作现在正常工作,似乎无法使其正常工作。我希望能够做类似

的事情
gemname command

的工作原理类似:

rspec test/whatever.rb

有关如何通过命令行执行的任何帮助都会很棒。

4 个答案:

答案 0 :(得分:3)

为了声明可执行文件,您必须在 yourgem.gemspec 中创建一个正确的行:

`git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }

此行以及另一个有用的行由bundle gem yourgem命令生成。只需执行它,然后根据您的需要修复 yourgem.gemspec 。将可执行文件放入gem的 bin / 文件夹,将所有库(包括版本)放入 lib / 文件夹。

下一步是使用二进制文件。将安装到系统中时,二进制文件夹会自动包含在二进制搜索路径中。所以你的宝石可以从任何地方执行。但是当你没有安装你的gem时,你仍然可以使用的exec对案例进行simelate,如下所示:

 bundle exec bin/your_exec

它从 lib / 文件夹中选择了需要的库,并且可执行文件将正常工作。

要确保可执行文件能够正常运行,请使用gem build yourgem.gemspec构建gem,然后使用gem install yourgem.gem进行安装,然后尝试。

答案 1 :(得分:2)

我认为问题是你还没有提交你的代码。 检查git ls-files -- bin/*是否显示了您要执行的脚本。

当您提交文件时,git ls-files将返回该文件,并且规范将能够加载脚本。

答案 2 :(得分:0)

查看这些博文: http://robdodson.me/blog/2012/06/14/how-to-write-a-command-line-ruby-gem/ http://rubylearning.com/blog/2011/01/03/how-do-i-make-a-command-line-tool-in-ruby/

我不确定你到目前为止所建的是什么,但这里有一些兴趣点:

  1. #!/usr/bin/env ruby表示可执行文件中的第一行(位于/bin文件夹中)。
  2. chmod +x filname使其可执行
  3. ARGV[0]传入的变量是从ARGV[0]
  4. 检索的
  5. s.executables << 'your_file'将可执行文件添加到gemspec

答案 3 :(得分:0)

我至少在我的具体问题上想到了这一点。我只需要直接调用bin命令而不是git ls循环。最上面的一个是底部的,不是出于某种原因。

spec.executables = ["toolshed"]

VS

spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }