我需要在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脚本,则会拯救该异常。
答案 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)
进一步阅读: