delayed_job - 处理作业返回值

时间:2012-12-21 08:42:13

标签: ruby-on-rails delayed-job exit-code

我正在使用delayed_job来执行系统调用。此系统调用调用Groovy脚本。

class Job
    def perform
        command "groovy file.groovy"
        system command
    end

    def success(job)
        # handle success
    end

    def error(job, exception)
        # handle error, exception
    end
end

这一切都很完美,但我总是回到“成功”状态,因为我的常规总是正常退出。我目前在Groovy脚本中抛出RuntimeExeptions来挑起失败的工作。当我调用system "groovy progra.groovy"并引发异常(groovy程序引发异常)时,system调用的返回值如预期false。但是当通过delayed_job执行相同操作时,它永远不会访问def error方法,而是访问def success方法。

关于delayed_job如何实际控制perform方法的返回,您有什么建议吗?什么时候进入errorfailure钩子。不幸的是,我在文档中没有找到关于此主题的任何内容。

提前致谢

1 个答案:

答案 0 :(得分:3)

你有没有试过这样的事情:

def perform
    command = "groovy file.groovy"
    system command || raise "Error executing command : #{command}"
end

我非常确定delayed_job将执行调用包装在一个救援块中,并根据它捕获的任何异常调用成功或错误。