在 Ruby 中安全地需要 gem

Posted

技术标签:

【中文标题】在 Ruby 中安全地需要 gem【英文标题】:Safely require gems in Ruby 【发布时间】:2011-11-10 14:08:31 【问题描述】:

有没有办法安全地要求红宝石宝石,以免在找不到宝石时引发异常?

我正在寻找接近此的解决方案:

if require 'hirb'
  # do some hirb related stuff
else
  # do other stuff
end

我希望这样可以确保没有不必要的 gem 导致我的部署失败。

【问题讨论】:

Ruby 应该有一个 kind_of_want 命令,用于当你不真正 require 某事时。 def would_like(gemname, &block); begin; require gemname; yield; rescue LoadError; puts "Could not load #gemname"; end; end:D 【参考方案1】:

大概是这样的:

begin
  require 'hirb'
rescue LoadError => e
  puts "could not find hirb"
end

【讨论】:

【参考方案2】:

最好的方法是使用 bundler,这样你就可以确定你的 gems 真的会被安装。

【讨论】:

Bundler 对它的作用有好处,但它对我想要做这个检查的地方没有帮助。 好的,我会使用 Kernel.gem 然后加载一个 gem,并确保它是一个 gem 而不是其他文件。

以上是关于在 Ruby 中安全地需要 gem的主要内容,如果未能解决你的问题,请参考以下文章