Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用延迟作业时,我想根据错误消息修改重新调度_Ruby On Rails_Ruby_Delayed Job - Fatal编程技术网

Ruby on rails 使用延迟作业时,我想根据错误消息修改重新调度

Ruby on rails 使用延迟作业时,我想根据错误消息修改重新调度,ruby-on-rails,ruby,delayed-job,Ruby On Rails,Ruby,Delayed Job,在回调时使用错误、失败和重新安排时,是否有办法使重新安排取决于我收到的错误类型 我已经设置了reschedule_at方法,但if会影响此类型的所有作业。我不知道如何根据错误类型和处理程序处理此行为。经过一些测试后,您似乎可以使用以下方法根据特定作业错误消息进行自定义重新安排: 在作业中定义实例变量以保存自定义重试延迟。此变量将在所有其他变量中序列化到数据库(或任何其他DelayedJob后端),即在作业运行之间保留其状态 在错误钩子中,根据异常参数中得到的错误(这是一个异常对象),将延迟设置为

在回调时使用错误、失败和重新安排时,是否有办法使重新安排取决于我收到的错误类型


我已经设置了reschedule_at方法,但if会影响此类型的所有作业。我不知道如何根据错误类型和处理程序处理此行为。

经过一些测试后,您似乎可以使用以下方法根据特定作业错误消息进行自定义重新安排:

  • 在作业中定义实例变量以保存自定义重试延迟。此变量将在所有其他变量中序列化到数据库(或任何其他DelayedJob后端),即在作业运行之间保留其状态

  • 错误
    钩子中,根据
    异常
    参数
    中得到的错误(这是一个
    异常
    对象),将延迟设置为任何值

  • 在方法中使用该自定义延迟

  • 该解决方案利用了
    方法上重新调度的事实。请参见以下示例:

    class MyJob
    
      attr_accessor :retry_delay
    
      def initialize
        self.retry_delay = 5 # default retry delay
      end
    
      def error(job, exception)
        # set up a different the delay time on a specific error
        if exception.is_a? NameError
          self.retry_delay = 10
        end
      end
    
      def reschedule_at(current_time, attempts)
        current_time + retry_delay.seconds
      end
    
    end