Ruby on rails 如何捕获rake任务中引发的异常

Ruby on rails 如何捕获rake任务中引发的异常,ruby-on-rails,ruby-on-rails-5,rake-task,Ruby On Rails,Ruby On Rails 5,Rake Task,我有一个rake任务,它循环CSV文件中的行,在该循环中,有一个begin/rescue块来捕获任何可能引发的异常。但当我运行它时,它不断地说“rake中止!”而且它没有进入救援区 CSV.foreach(path, :headers => true) do |row| id = row.to_hash['id'].to_i if id.present? begin # call to mymethod rescue => ex put

我有一个rake任务,它循环CSV文件中的行,在该循环中,有一个begin/rescue块来捕获任何可能引发的异常。但当我运行它时,它不断地说“rake中止!”而且它没有进入救援区

CSV.foreach(path, :headers => true) do |row|
  id = row.to_hash['id'].to_i
  if id.present?
    begin
      # call to mymethod
    rescue => ex
      puts "#{ex} error executing task"
    end
  end
end
...
def mymethod(...)
  ...
  begin
    response = RestClient.post(...)
  rescue => ex
    raise Exception.new('...')
  end
end
预期:它应该完成CSV的所有行的循环

实际结果:到达“raise”异常后停止,表示:

雷克流产了

异常:此处显示错误消息

原因:

RestClient::InternalServerError:500内部服务器错误


您可以使用
next
跳过循环的错误步骤:

CSV.foreach(path, :headers => true) do |row|
  id = row.to_hash['id'].to_i
  if id.present?
    begin
      method_which_doing_the_staff
    rescue SomethingException
      next
    end
  end
end
并在方法内部引发异常:

def method_which_doing_the_staff
  stuff
  ...
  raise SomethingException.new('hasd')
end

我通过注释掉引发异常的行来解决这个问题,因为它似乎是目前最快的修复方法

# raise Exception.new('...')

如果有更好的方法,我仍然愿意接受其他建议。

嗨,Barmic,谢谢你的建议。不幸的是,我以前也试过。但它仍然被异常所阻止。我更新了问题以显示我在运行任务时收到的类似错误。我认为这不会有任何影响@barmic<代码>下一步如果基于某个条件使用,则会很有用,尽管关闭
puts
,因为这不会改变任何东西。这看起来可能是另一个问题-也许值得在OdethA中包含您的实际代码。?任务中其他地方是否有可能引发此问题的RestClient调用?@SRack,我编辑了上面的示例代码,包括所调用方法的结构