Rails: возвращать ошибки из модуля в задачу Rake? - PullRequest
1 голос
/ 04 апреля 2011

Как передать ошибку из моего модуля обратно в задачу rake, которая его вызвала?

Моя задача rake выглядит следующим образом:

require 'mymodule.rb'

task :queue => :environment do
  OPERATOR = Mymodule::Operator.new
  begin
    OPERATOR.initiate_call (1234567189)
  rescue StandardError => bang
    puts "Shit happened: #{ bang} "
  end   
end

И вот мой модуль ..

module Mymodule
  class Operator    
    def initiate_call (number)
      begin
        # make the call
      rescue StandardError => bang
        flash[:error] = "Error #{bang}"
        return
      end
    end    
  end
end

Я также вызываю этот модуль из контроллера, поэтому было бы неплохо иметь решение по обработке ошибок, более или менее независимое.

Запуск Rails 3. Любые несвязанные комментарии (т.е.предложения) на моей структуре кода более чем приветствуются:)

1 Ответ

0 голосов
/ 04 апреля 2011

Ваш Operator#initiate_call метод перехватывает StandardError исключения, поэтому ваша задача rake никогда их не увидит. Я бы сбросил rescue с initiate_call и позволил бы вызывающей стороне разобраться со всей обработкой исключений. Тогда у вас будет flash[:error] = "Error #{bang}" в обработчике исключений вашего контроллера, и задача rake останется как есть.

Основной подход заключается в том, чтобы подтолкнуть обработку ошибок к стеку вызовов полностью, чтобы кто-то мог что-то с этим сделать; initiate_call на самом деле не может сделать ничего полезного, за исключением того, что он не должен пытаться справиться с этим.

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