【问题标题】:How to rescue from incompatible library version ... (fatal) in ruby如何从不兼容的库版本中拯救...(致命)在 ruby
【发布时间】:2017-04-02 15:40:52
【问题描述】:

我需要一个本地扩展,它在我的文件系统中,但与我当前的系统不兼容。在这种情况下,我想在 ruby​​ 中做出反应并使用模拟实现,但是这段代码

begin
  require 'dotstar'
rescue LoadError
  puts "Got LoadError"
  require 'dotstarsimulator'
rescue
  puts "Warning: could not open dotstar native support => using sim"
  require 'dotstarsimulator'
end

直接崩溃而不调用我的救援代码。

irb 会话也是如此,我只是尝试require 'dotstar'

【问题讨论】:

  • 在 OS X 中观察到此行为。
  • 您的问题不清楚:您只能rescueExceptionraised。如果它“简单地崩溃”,那么你不能从中rescue。如果它是raises 和Exception,那么你可以从Exception 得到rescue
  • 查看 ruby​​ mri 源代码后,我发现这是/曾经是 osx 特定的行为。对于现代版本的 osx,它被固定为:bugs.ruby-lang.org/projects/ruby-trunk/repository/revisions/…。请参阅相应的错误报告:bugs.ruby-lang.org/issues/12956。从技术上讲,接受的答案以及@jör 的评论是正确的。

标签: ruby exception exception-handling


【解决方案1】:

看起来这是一个副本:How do I rescue from a `require': no such file to load in ruby?

你必须专门resque LoadError

【讨论】:

  • 您好,感谢您的提示,但如果是原生扩展,它就无法正常工作。我更新了我的问题以包括 LoadError。
  • 我认为这是正确的。我没有这些宝石,但对我来说粘贴您的更新代码返回:=> Got LoadError => LoadError: cannot load such file -- dotstarsimulator
猜你喜欢
  • 2010-10-07
  • 2010-12-15
  • 2013-06-12
  • 2018-04-08
  • 1970-01-01
  • 2013-06-28
  • 2021-11-25
  • 2012-07-31
  • 2015-07-03
相关资源
最近更新 更多