关于ruby on rails:如何在rake任务中捕获引发异常

How to catch raised exception in rake task

我有一个rake任务循环遍历CSV文件中的行,并且在该循环内部,有一个开始/救援块来捕获任何可能引发的异常。 但是当我运行它时,它一直在说"耙子流产!" 它没有进入救援区

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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的所有行

实际结果:在达到"加注"异常后停止说:

rake aborted!

Exception: error message here

...

Caused by:

RestClient::InternalServerError: 500 Internal Server Error


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

1
2
3
4
5
6
7
8
9
10
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

并在您的方法中引发异常:

1
2
3
4
5
def method_which_doing_the_staff
  stuff
  ...
  raise SomethingException.new('hasd')
end


我只是通过评论引发异常的行解决了这个问题,因为它似乎是现在最快的修复。

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

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