回答
%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. Shell脚本知道文件系统是否已经安装
- 6. 在红宝石1.8.7系统上如何安装回形针宝石?
- 7. 在全系统RVM 1.5.2安装红宝石安装问题
- 8. 如何使用厨师系统范围的rbenv安装宝石
- 9. '宝石安装'和'sudo宝石安装'
- 10. 尽管安装了宝石,但还是找不到宝石
- 11. 如何知道是否安装了Flash的调试版本?
- 12. 如何知道是否使用ActionScript安装了软件
- 13. 如何知道我的Mac上是否安装了ifort(雪豹)?
- 14. 如何知道我的Ubuntu是否安装了LAMP或XAMPP?
- 15. 如何知道我是否安装了IIS Express或完整版?
- 16. 耙宝石:安装,如何防止安装特定的宝石?
- 17. 宝石安装红宝石
- 18. 如何知道用户是否在Activity中触发了onDestroy而不是系统?
- 19. '宝石更新 - 系统'会让我以前安装的宝石不兼容吗?
- 20. 如何知道系统正在安装ISO
- 21. 我已经做了“酿安装PostgreSQL”了9.0.2,但运行“宝石安装PG”我知道缺少库
- 22. 红宝石:安装宝石,如果用户没有安装它
- 23. 损坏红宝石宝石系统
- 24. 在轨道上安装宝石,红宝石。使用JSON错误
- 25. 如何知道Linux系统中的端口是否打开
- 26. 别再问了密码,安装宝石
- 27. 即使安装了宝石,GemNotFound
- 28. 红宝石宝石的JRuby后走了之后安装
- 29. 如何知道系统
- 30. 从浏览器UI中,如何识别系统中是否安装了VSTO 3.0?
如果它没有找到给定的宝石它给出了吨错误我该如何处理?我正在寻找简单的事情,如TRUE或无。 – pankajdoharey
+1 RubyGems是一个* Ruby *库。从Ruby泄露出来的“gem”有很多种不同的错误。只需使用API。 –
即使我想使用库,但它没有找到宝石时会产生太多错误 – pankajdoharey