Ruby setcode是什么意思?如何捕获其中的错误?

Ruby setcode是什么意思?如何捕获其中的错误?,ruby,puppet,facter,Ruby,Puppet,Facter,我写了以下事实。外部命令有时会抛出一个错误,我想捕获它。我发现了许多使用begin…end块捕获错误的示例。不幸的是,这些都与setcode do…end块无关。事实上,我找不到任何关于setcode的参考资料。有人能解释一下吗 Facter.add(:docexists) do setcode do cryptdevice = File.read("/home/adam/.cryptdevice") if `cryptsetup luksOpen --key-file /h

我写了以下事实。外部命令有时会抛出一个错误,我想捕获它。我发现了许多使用
begin
end
块捕获错误的示例。不幸的是,这些都与
setcode do
end
块无关。事实上,我找不到任何关于
setcode
的参考资料。有人能解释一下吗

Facter.add(:docexists) do
  setcode do
    cryptdevice = File.read("/home/adam/.cryptdevice")
    if `cryptsetup luksOpen --key-file /home/adam/klucz.bin #{cryptdevice} crypt-tmp`
      tmp = `cryptsetup luksClose crypt-tmp`
      true
    else
      false
    end
  end
end

如果我理解正确的话,你会认为

if `cryptsetup luksOpen --key-file /home/adam/klucz.bin #{cryptdevice} crypt-tmp`
线路。然后,
开始救援结束
块应工作:

Facter.add(:docexists) do
  setcode do
    begin
      cryptdevice = File.read("/home/adam/.cryptdevice")
      if `cryptsetup luksOpen --key-file /home/adam/klucz.bin #{cryptdevice} crypt-tmp`
        tmp = `cryptsetup luksClose crypt-tmp`
        true
      else
        false
      end
    rescue => e
      # handle error
    end
  end
end

begin-rescue-end
block在传递到
setcode
方法的块中有什么问题?
setcode
是来自
Facter
的DSL,与您的问题无关。这看起来更清楚一些:
result=(`cryptsetup…`rescue-false)&&`cryptsetup…
。@mudasobwa是的,但仅当OP不想处理错误时才起作用,但仅在出现错误时返回
false