在 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的主要内容,如果未能解决你的问题,请参考以下文章

如何安全地更新 Rails 应用程序中的所有 gem

如何知道 ruby​​ 中啥不是线程安全的?

运行 Ruby 命令时,PATH 中不安全的世界可写目录 /Users/username,模式 040777

在 Alfred 工作流中运行的 Ruby 脚本中包含 Gem

Ruby 需要'some-gem' 在控制台中工作,而不是在 Eclipse 中?

如何使用PG Ruby Gem有条件地回滚事务