Ruby on Rails спасается от 'Errno :: ENOENT' - PullRequest
6 голосов
/ 20 февраля 2011

Мне нужно спастись из 'Errno :: ENOENT' в приложении на Ruby on Rails 3.0.4. В настоящее время у меня есть контроллер со следующим кодом:

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

Однако код журнала никогда не вызывается, а журналы показывают:

script / rails: нет такого файла или каталога - lame ...

Если я создаю скрипт ruby ​​с тем же фрагментом, исключение спасается.

1 Ответ

5 голосов
/ 20 февраля 2011

В Ruby 1.8 Errno::ENOENT не вызывается выполнением оболочки / обратными галочками - ошибка, которую вы видите, является стандартной ошибкой, напечатанной оболочкой.Если вы хотите обнаружить это, я бы порекомендовал найти код выхода 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)

Дополнительная информация:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...