如何在rake任务中使用rescue

时间:2014-11-07 01:36:53

标签: ruby-on-rails ruby rake

我有一个像这样的rake任务:

task :update_all => :environment do
        codes = get_all_codes
        codes.each{ |code| find_or_create_from_my_data(code) }
end

有时更新失败,所以我想知道哪些代码失败了。 为此我写了这样的话:

task :update_all => :environment do
    begin
        codes = get_all_codes
        @code
        codes.each{ |code| @code = code; find_or_create_from_my_data(code) }
    rescue
        p @code
    end
end

它工作正常,但我认为它有点多余。我怎样才能更有效地写作?

2 个答案:

答案 0 :(得分:1)

e.message将显示哪些代码失败以及原因

task :update_all => :environment do
    codes = get_all_codes
    codes.each{ |code| find_or_create_from_my_data(code) }
  rescue => e
    puts "(#{e.message})"
end

答案 1 :(得分:1)

这个怎么样:

task :update_all => :environment do
  get_all_codes.each do |code|
    begin
      find_or_create_from_my_data(code)
    rescue
      p code
    end
  end
end

这样,即使一个代码失败,也会将其打印出来并转移到其他代码而不是提前中止。