Ruby on rails 延迟作业-处理作业返回值
我正在使用delayed_作业执行系统调用。此系统调用调用Groovy脚本Ruby on rails 延迟作业-处理作业返回值,ruby-on-rails,delayed-job,exit-code,Ruby On Rails,Delayed Job,Exit Code,我正在使用delayed_作业执行系统调用。此系统调用调用Groovy脚本 class Job def perform command "groovy file.groovy" system command end def success(job) # handle success end def error(job, exception) # handle error, exceptio
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总是正确退出。我目前正在Groovy脚本中抛出runtimeexecptions
,以引发作业失败。当我调用system“groovy progra.groovy”
并引发异常(groovy程序引发异常)时,system
调用的返回值如预期的那样为false
。但当通过延迟_作业执行相同操作时,它从不访问def error
方法,而是访问def success
方法
对于延迟作业如何实际控制perform
方法的返回,您有什么建议吗?它何时进入错误
或故障
挂钩。不幸的是,我在文档中没有找到关于这个主题的任何内容
提前感谢您是否尝试过以下方法:
def perform
command = "groovy file.groovy"
system command || raise "Error executing command : #{command}"
end
我很确定延迟作业会将执行调用包装在救援块中,并根据捕获到的任何异常调用成功或错误。您是否尝试过类似的操作:
def perform
command = "groovy file.groovy"
system command || raise "Error executing command : #{command}"
end
我很确定延迟作业会将执行调用包装在救援块中,并根据捕获的任何异常调用成功或错误。不幸的是,系统命令不会引发任何异常。即使退出代码是1+…这正是我建议您在system()调用之后添加“| | raise”Error executing command:#{command}”的原因。您还可以检查结果是否为nil,在这种情况下会引发一个异常,如“command#{command}failed(原因:$?)”,我的第一个建议只是检查“falsy”值,然后再加上,我运行了错误处理。非常感谢。不幸的是,system命令没有引发任何异常。即使退出代码是1+…这正是我建议您在system()调用之后添加“| | raise”Error executing command:#{command}”的原因。您还可以检查结果是否为nil,在这种情况下会引发一个异常,如“command#{command}failed(原因:$?)”,我的第一个建议只是检查“falsy”值,然后再加上,我运行了错误处理。多谢各位。