【问题标题】:Don't stop rake task if raise an error如果引发错误,不要停止 rake 任务
【发布时间】:2016-01-27 09:11:24
【问题描述】:

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

我的部分代码:

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

脚本已停止,没有添加有效记录。

【问题讨论】:

    标签: ruby-on-rails ruby rake


    【解决方案1】:

    将其包装在开始/救援块中。

    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

    如果您只想对这些特定错误进行处理,则可以先挽救特定错误。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-23
      • 1970-01-01
      • 2015-08-25
      相关资源
      最近更新 更多