回答
%x('gem' 'list' | 'grep' 'capybara').empty?
如果你想從ruby中做到這一點,你可以使用一個內置的RubyGem方法。舊版本提供了返回布爾值的Gem.available?('capybara')
方法,但這已被棄用。現在推薦的方法是使用(假設你使用一個支持它的一個版本):
Gem::Specification::find_by_name('capybara')
http://rubygems.rubyforge.org/rubygems-update/Gem/Specification.html
更新
如果你想要一個布爾結果,你可以使用.find_all_by_name()
並檢查結果數組是否爲空:
if Gem::Specification::find_all_by_name('capybara').any?
# Gem is available
end
下面是一些適用於我的代碼。它還會正確處理Gem::LoadError
,當您嘗試加載無法找到的寶石時,它會被拋出。
require 'rubygems'
def can_we_find_gem(gem_name)
found_gem = false
begin
found_gem = Gem::Specification.find_by_name(gem_name)
rescue Gem::LoadError
puts "Could not find gem '#{gem_name}'"
else
puts "Found gem '#{gem_name}'"
end
end
can_we_find_gem('chef')
can_we_find_gem('not-chef')
圍繞拋出和捕獲錯誤的設計代碼並不好。 – Automatico
投擲和捕捉錯誤是非常基本的錯誤處理。當我嘗試打開文件以查看它們是否已成功打開時,我會做同樣的事情。我認爲您的評論可能還有其他內容,如果您想澄清或擴展它,會很高興。 –
當你不知道錯誤的原因時,捕捉錯誤是很好的,但是設計系統依靠捕捉錯誤並不是很好的設計。您應該製作驗證函數不會拋出錯誤的方法。例如,如果你使用一些自動錯誤記錄系統,你將會得到大量沒有任何意義的垃圾錯誤。 – Automatico
我堅持這個在我的Gemfile的開頭:
def gem_available?(gemname)
if Gem::Specification.methods.include?(:find_all_by_name)
not Gem::Specification.find_all_by_name(gemname).empty?
else
Gem.available?(gemname)
end
end
就用:
if (gem_available?('gem_i_need'))
,一切都很好地工作!
- 1. 如何找出我的系統上安裝了哪個寶石/原始寶石?
- 2. 知道紅寶石系統依賴項
- 3. Rails是否需要安裝爲系統寶石?
- 4. 覆蓋寶石的系統安裝
- 5. 如何檢查是否安裝了寶石?
- 6. Shell腳本知道文件系統是否已經安裝
- 7. 在紅寶石1.8.7系統上如何安裝回形針寶石?
- 8. 如何檢測Windows系統中是否安裝了DDS?
- 9. 在全系統RVM 1.5.2安裝紅寶石安裝問題
- 10. 如何使用廚師系統範圍的rbenv安裝寶石
- 11. '寶石安裝'和'sudo寶石安裝'
- 12. 儘管安裝了寶石,但還是找不到寶石
- 13. 如何知道我的Mac上是否安裝了ifort(雪豹)?
- 14. 如何知道是否使用ActionScript安裝了軟件
- 15. 如何知道我是否安裝了IIS Express或完整版?
- 16. 如何知道我的Ubuntu是否安裝了LAMP或XAMPP?
- 17. 如何知道是否安裝了Flash的調試版本?
- 18. django項目如何檢測系統是否安裝了django?
- 19. 如何檢查Windows系統上是否安裝了程序
- 20. 耙寶石:安裝,如何防止安裝特定的寶石?
- 21. 寶石安裝紅寶石
- 22. 安裝紅寶石寶石
- 23. 是否可以知道GKPlayer是否安裝了遊戲?
- 24. 如何知道用戶是否在Activity中觸發了onDestroy而不是系統?
- 25. 安裝寶石時,如何自動安裝依賴關係?
- 26. 即使安裝了正確的寶石,在軌道中的NoMethodError
- 27. 是否安裝了寶石?錯誤:未定義的方法best_in_place
- 28. 在MAC操作系統中安裝紅寶石linalg失敗
- 29. 寶石安裝
- 30. '寶石更新 - 系統'會讓我以前安裝的寶石不兼容嗎?
如果它沒有找到給定的寶石它給出了噸錯誤我該如何處理?我正在尋找簡單的事情,如TRUE或無。 – pankajdoharey
+1 RubyGems是一個* Ruby *庫。從Ruby泄露出來的「gem」有很多種不同的錯誤。只需使用API。 –
即使我想使用庫,但它沒有找到寶石時會產生太多錯誤 – pankajdoharey