我想建立一個命令行rubygem。我使用bundler來創建gem並在本地安裝gem。它生成了所需的目錄。我也能測試,如果我需要我的寶石我可以用它裏面的方法。我試圖讓命令行塊現在工作,似乎無法得到它的工作。我希望能夠像做紅寶石寶石命令行工具
gemname command
方式類似,rspec作品:
rspec test/whatever.rb
如何能夠通過命令行來執行將是巨大的任何幫助。
我想建立一個命令行rubygem。我使用bundler來創建gem並在本地安裝gem。它生成了所需的目錄。我也能測試,如果我需要我的寶石我可以用它裏面的方法。我試圖讓命令行塊現在工作,似乎無法得到它的工作。我希望能夠像做紅寶石寶石命令行工具
gemname command
方式類似,rspec作品:
rspec test/whatever.rb
如何能夠通過命令行來執行將是巨大的任何幫助。
結帳這些博客文章: 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好吧,看來我可以運行bin/mycommand而不是gemname mycommand是否它是如何工作的?我是否需要配置一些東西才能運行gemname mycommand? – wallerjake
增加了'executables'行。試一試 – AdamT
這就是寶石寶石給我的那個。 spec.executables = spec.files.grep(%r {^ bin /}){| f | File.basename(f)}這是不正確的?我應該試着將特定的文件放到位嗎?我也需要重新加載Gem bundle安裝嗎? – wallerjake
爲了宣告你只是作出適當的線在你可執行文件yourgem.gemspec:
`git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
該行以及其他有用的行由bundle gem yourgem
命令生成。只要執行它,然後根據你的需要修復yourgem.gemspec。把可執行文件到斌/你的寶石文件夾,所有的圖書館,包括版本,爲的lib/文件夾。
下一步是使用二進制。當你安裝gem到系統中,二進制文件夾會自動納入二進制搜索路徑。所以你的寶石可以從任何地方執行。但是,當沒有安裝你的寶石,你仍然可以用bundler的exec來simelate情況如下:
bundle exec bin/your_exec
它選擇了從的lib/夾起來需要librarires,和可執行文件將工作正常。
要確保可執行文件能夠正常工作,請使用gem build yourgem.gemspec
構建寶石,然後使用gem install yourgem.gem
進行安裝,然後嘗試。
好吧,所以這似乎工作時,我使用軟件包執行bin/my_exec。所以當我發佈這個時,你說用戶將能夠運行mygemname mycommand?我可以在將它發佈到rubygems之前在本地進行測試嗎? – wallerjake
@wallerjake當然是建立gem'gem build yourgem.gemspec',然後安裝它'gem install yourgem.gem' –
是的,它說它已經安裝了,但是當我輸入我的gemname mycommand它說沒有找到gemname。成功安裝gemname-0.0.1 解析文檔gemname-0.0.1 的安裝文件裏gemname-0.0.1 1寶石安裝 – wallerjake
我想到了這一點,至少對於我的具體問題。我只需要直接調用bin命令而不是那個git ls循環。由於某種原因,最上面的那個不起作用。
spec.executables = ["toolshed"]
VS
spec.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
我認爲問題是,你還沒有COMMITED你的代碼呢。 檢查git ls-files -- bin/*
是否顯示您要執行的腳本。
當你提交你的文件,然後git ls-files
將返回它,該規範將能夠加載腳本。
我覺得@МалъСкрылевъ的[answer](http://stackoverflow.com/a/21373096/2661448)是指向同一方向。學分給他! – delucas
是的我相信你是對的。我暫時離開了它,但我打算再次回來並更新。謝謝! – wallerjake
你必須自己實現二進制/命令行工具。例如https://github.com/jimweirich/rake/tree/master/bin – mhutter
你能解釋一些嗎?所以我創建了這個可執行文件,然後運行bundle install,它應該可以工作?此外,當它Rake.application.run是特定於耙命令?我需要在我的寶石?當我運行mygem mycommand時,它只是說沒有找到命令mygem – wallerjake