2014-11-07 111 views
1

使用救援我有一個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 

它工作正常,但我認爲這是一個有點多餘。我怎樣才能更有效地寫作?

+1

途經費用:你需要在你的任務中使用'begin'和'end'來「拯救」,而'def'則不是這種情況。 – Dennis 2014-11-18 15:49:34

回答

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 

這樣一來,即使一個代碼失敗,它會打印出來,轉移到其他人,而不是提前中止。

+0

它看起來比我的好多了。謝謝! – ironsand 2014-11-07 06:36:07

2

的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

不幸的是'e.message'不包含'code'變量,與'def'不同,'rescue'子句不能在'task'中使用。 – ironsand 2014-11-07 03:05:42