我正在尝试构建一个命令行红宝石。我正在使用Bundler创建宝石并在本地安装宝石。它生成了所需的目录。我还能够测试,如果我需要我的 gem ,我可以使用其中的方法。我正试图使命令销量现在正常工作,并且似乎无法使其正常工作。我希望能够做
之类的事情gemname command
类似于RSPEC的工作方式:
rspec test/whatever.rb
关于如何通过命令行执行的任何帮助将很棒。
为了声明您只需要在 yourgem.gem.gemspec 中制作适当的行
`git ls-files -- bin/*`.split("n").map{ |f| File.basename(f) }
bundle gem yourgem
命令生成了此行,以及其他有用的行。只需执行它,然后根据需要修复 Yourgem.gemspec 。将可执行文件放入宝石的 bin/文件夹中,以及包括版本在内的所有库中 lib/文件夹。
下一步是使用二进制。将GEM安装到系统中时,二进制文件夹将自动包含到二进制搜索路径中。因此,您的宝石可以从Anywere中执行。但是,当您的宝石未安装时,您仍然能够使用Bundler的Exec模拟该情况如下:
bundle exec bin/your_exec
它从 lib/文件夹中挑选需要librarires,并且可执行文件可正常工作。
确保可执行文件可以工作,使用gem build yourgem.gemspec
构建GEM,然后使用gem install yourgem.gem
安装,然后尝试。
我认为问题是您尚未提交代码。检查git ls-files -- bin/*
是否向您显示要执行的脚本。
提交文件时,git ls-files
将返回它,规格将能够加载脚本。
结帐以下博客文章:http://robdodson.me/blog/2012/06/14/how-to-to-write-a-command-line-lline-ruby-gem/http://rubylearning.com/blog/2011/01/03/how-do-i-i-make-a-command-line-tool-in-ruby/
我不太确定您到目前为止建造了什么,但这里有几点兴趣:
-
#!/usr/bin/env ruby
对于可执行文件中的第一行(在/bin
文件夹中)。 -
chmod +x filname
使其可执行 -
ARGV[0]
传递的变量从ARGV[0]
检索 -
s.executables << 'your_file'
将可执行文件添加到Gemspec
我至少在我的特定问题上弄清楚了这一点。我只需要直接喊出bin命令,而不是git ls循环。顶部的作用底部不是出于某种原因。
spec.executables = ["toolshed"]
vs
spec.executables = `git ls-files -- bin/*`.split("n").map{ |f| File.basename(f) }