gpt4 book ai didi

ruby-on-rails - 在delayed_job中,当Delayed::Worker.delay_jobs为假时是否会调用钩子(Hook)?

转载 作者:行者123 更新时间:2023-12-03 00:19:40 24 4
gpt4 key购买 nike

我正在使用collectiveidea/delayed_job 。在我的 RSpec 测试中,[:before, :after, :success] Hook 没有像我预期的那样被调用。

Delayed::Worker.delay_jobs = true(默认值)时,我看到 enqueue() 钩子(Hook)被调用,仅此而已。这是我期望的行为,因为没有单独的任务处理作业。

但是当Delayed::Worker.delay_jobs = false时,按照文档测试的建议,我看到我的 process() 方法被调用,但没有任何钩子(Hook)。

如果这不是预期的行为,对我做错了什么有什么建议吗? (我可以轻松地包含代码。)如果这是预期的行为,那么测试 Hook 的策略是什么?

[旁注:delayed_job 的规范目录,特别是 performable_method_spec tests ,建议您可以设置 Delayed::Worker.delay_jobs = false 并仍然获得对您的钩子(Hook)的回调。但这些测试使用 obj.delay.method 构造而不是 Delayed::Job.enqueue(object_with_a_perform_method) 来将作业排入队列。这会有所不同吗?]

[更新:我尝试过 obj.delay.method 形式以及 Delayed::Job.enqueue(obj_with_a_perform_method) 形式 - 我不知道在任何一种情况下都看不到钩子(Hook)被调用。]

最佳答案

关于collectiveidea/delayed_job github page ,我发现这个错误被描述、修复和删除。据推测,delayed_job 的更新版本将解决该问题。

更新:我找到了除提取最新版本之外的解决方法。您可以显式调用 Delayed::Job 工作器方法。它将处理队列中的项目——当然与测试在同一个线程中——但是回调 Hook 确实会被调用:

[successes, failures] = Delayed::Worker.new.work_off

关于ruby-on-rails - 在delayed_job中,当Delayed::Worker.delay_jobs为假时是否会调用钩子(Hook)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6865475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com