Ruby on rails 如何捕获rake任务中引发的异常
我有一个rake任务,它循环CSV文件中的行,在该循环中,有一个begin/rescue块来捕获任何可能引发的异常。但当我运行它时,它不断地说“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
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,我编辑了上面的示例代码,包括所调用方法的结构