Rails:从模块到Rake任务返回错误?

时间:2011-04-03 22:25:35

标签: ruby-on-rails ruby module error-handling

如何将模块中的错误传回给调用它的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 :(得分:0)

您的Operator#initiate_call方法会捕获StandardError个例外,因此您的佣金任务永远不会看到它们。我从rescue删除initiate_call并让调用者处理所有异常处理。然后,你的控制器的异常处理程序中有flash[:error] = "Error #{bang}",rake任务将保持原样。

基本方法是将错误处理调用堆栈一直推送给可以对其执行操作的人; initiate_call无法对异常做任何有用的事情,因此它不应该尝试处理它。