我正在尝试构建命令行ruby gem。我使用bundler来创建gem并在本地安装gem。它生成了所需的目录。我还能测试,如果我需要我的 Gem ,我可以使用它里面的方法。我正在尝试让命令行工作现在正常工作,似乎无法使其正常工作。我希望能够做类似
的事情gemname command
与rspec的工作原理类似:
rspec test/whatever.rb
有关如何通过命令行执行的任何帮助都会很棒。
答案 0 :(得分:3)
为了声明可执行文件,您必须在 yourgem.gemspec 中创建一个正确的行:
`git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
此行以及另一个有用的行由bundle gem yourgem
命令生成。只需执行它,然后根据您的需要修复 yourgem.gemspec 。将可执行文件放入gem的 bin / 文件夹,将所有库(包括版本)放入 lib / 文件夹。
下一步是使用二进制文件。将gem安装到系统中时,二进制文件夹会自动包含在二进制搜索路径中。所以你的宝石可以从任何地方执行。但是当你没有安装你的gem时,你仍然可以使用bundler的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/
我不确定你到目前为止所建的是什么,但这里有一些兴趣点:
#!/usr/bin/env ruby
表示可执行文件中的第一行(位于/bin
文件夹中)。chmod +x filname
使其可执行ARGV[0]
传入的变量是从ARGV[0]
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) }