Ruby on Rails从'Errno :: ENOENT'救出

时间:2011-02-20 07:53:48

标签: ruby-on-rails ruby

我需要在Ruby on Rails 3.0.4应用程序中拯救'Errno :: ENOENT'。我目前有控制器,代码如下:

begin
  `lame #{parameters}`
rescue Errno::ENOENT
  logger.info "command 'lame' not found: ensure LAME is installed"
end

但是,永远不会调用日志代码,但日志显示:

  

script / rails:没有这样的文件或目录 - 跛脚......

如果我使用相同的代码片段创建ruby脚本,则会拯救该异常。

1 个答案:

答案 0 :(得分:5)

在Ruby 1.8中,Errno::ENOENT不是由shell执行/反向标记引发的 - 您看到的错误是由shell打印的标准错误。如果你想检测这个,我建议你找一个127的退出代码:

`lame #{parameters} 2>&1`
if $?.exitstatus == 127
  logger.info "command 'lame' not found: ensure LAME is installed"
end

但是,这将在Ruby 1.9中引发Errno::ENOENT

您可以考虑从which lame检查输出:

lame_installed = system("which lame >/dev/null")
# or even better
lame_available = !(lame_path = `which lame`.strip).empty? && File.executable?(lame_path)

进一步阅读: