如何确定系统中是否安装了gem?

pan*_*rey 4 ruby gem rubygems

如何确定系统中是否安装了gem?

%x('gem' 'list').split.find{|i| i == "capybara"}
Run Code Online (Sandbox Code Playgroud)

有更短的方法吗?

Pet*_*own 15

如果您尝试在ruby中执行此操作,则可以使用内置的RubyGem方法.旧版本提供了一个Gem.available?('capybara')返回布尔值的方法,但这已被弃用.现在推荐的方法是使用(假设您使用的是支持它的版本):

Gem::Specification::find_by_name('capybara')
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

  • +1 RubyGems是一个*Ruby*库.从Ruby中剔除"gem"是如此多种不同的错误.只需使用API​​. (2认同)