【问题标题】:How to execute multiple arguments in a single rake using sidekiq worker?如何使用 sidekiq worker 在单个 rake 中执行多个参数?
【发布时间】:2025-12-24 05:25:16
【问题描述】:

我是sidekiq的新手,我刚刚创建了sidekiq worker,当我运行sidekiq worker时,它只执行第一个rake任务

我想用两种不同的参数组合执行单个 rake

例如

def perform
  Rake::Task['test:fetch'].invoke("foo", "bar", 1, 1)
  Rake::Task['test:fetch'].invoke("foo1", "bar1", 1, 1)
end

如何以 5 分钟的间隔执行上述操作,我应该运行 rake 2 次还是任何其他方法来传递两个不同的参数?

【问题讨论】:

    标签: arguments rake sidekiq worker


    【解决方案1】:

    这就是 Rake 的工作原理。阅读有关任务和调用()的 rake 文档

    【讨论】:

      【解决方案2】:

      调用invoke方法后需要重新启用rake任务,或者使用execute避免重新启用。

      使用调用,您的代码可能如下所示:

      def perform
        Rake::Task['test:fetch'].invoke("foo", "bar", 1, 1)
        Rake::Task['test:fetch'].reenable
        Rake::Task['test:fetch'].invoke("foo1", "bar1", 1, 1)
      end
      

      使用执行,您的代码可能如下所示:

      def perform
        task_args = {:arg1 => "foo", :arg2 => "bar", :arg3 => 1, :arg4 => 1 }
        Rake::Task['test:fetch'].execute(Rake::TaskArguments.new(task_args.keys, task_args.values))
      
        task_args = {:arg1 => "foo1", :arg2 => "bar1", :arg3 => 1, :arg4 => 1 }
        Rake::Task['test:fetch'].execute(Rake::TaskArguments.new(task_args.keys, task_args.values)
      end
      

      更多解释请看这里:Why is Rake not able to invoke multiple tasks consecutively?

      【讨论】: