如果出现错误,请不要停止rake任务

时间:2015-10-27 19:20:50

标签: ruby-on-rails ruby rake

我有简单的rake文件。 它将数据从.xls文件导入数据库。 但有些数据无效。然后数据无效停止执行脚本。 但是我想跳过这一行并尝试下一行。

我的部分代码:

data.each do |row|

username = row[0].slice!(0..2) + row[1].slice!(0..2) + rand(100).to_s
username.downcase
password = "pass1234"
User.create!(
    email: row[2].downcase,
    username: username,
    first_name: row[0],
    last_name: row[1],
    expiration_date: row[3],
    password: password,
    password_confirmation: password)
p 'done'

错误与验证有关,例如:

rake aborted!
ActiveRecord::RecordInvalid: Validation failed: Expiration date must be after 2015-10-27

脚本已停止且未添加有效记录。

1 个答案:

答案 0 :(得分:5)

将其包裹在开始/救援区。

data.each do |row|
  begin 
    username = row[0].slice!(0..2) + row[1].slice!(0..2) + rand(100).to_s
    username.downcase
    password = "pass1234"
    User.create!(
        email: row[2].downcase,
        username: username,
        first_name: row[0],
        last_name: row[1],
        expiration_date: row[3],
        password: password,
        password_confirmation: password)
    p 'done'
  rescue => e
    # log exception or ignore it.
  end 
end 

请注意,这是有效的,因为默认救援是针对StandardError的。从ActiveRecord :: RecordInvalid< StandardError的。它将被捕获'

如果您只想对这些特定错误执行某些操作,则可以首先解决特定错误。

(供参考,参见API:http://ruby-doc.org/core-2.2.0/Exception.html