问题标签 [clockwork]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1319 浏览

heroku - Heroku 时钟流程:如何确保作业不被跳过?

我正在构建一个依赖于预定作业的 Heroku 应用程序。我们之前使用的是 Heroku 调度器,但时钟进程似乎更加灵活和健壮。所以现在我们使用时钟进程在特定时间/间隔将后台作业排入队列。

Heroku 的文档提到,与所有测功机一样,时钟测功机每天至少重新启动一次——这会导致时钟进程跳过预定作业的风险:“由于测功机每天至少重新启动一次,因此需要一些逻辑在时钟进程启动时存在,以确保在测功机重新启动期间不会跳过作业间隔。” (见https://devcenter.heroku.com/articles/scheduled-jobs-custom-clock-processes

有哪些推荐的方法可以确保不跳过预定的作业,并重新排队错过的任何作业?

一种可能的方法是在作业运行/排队时创建数据库记录,并在时钟作业中定期检查预期记录的存在。最大的缺点是,如果时钟测功机存在系统性问题,导致它在很长一段时间内停机,那么我不能每 X 小时进行一次轮询以确保计划的作业成功运行,因为该轮询发生在时钟测功机内。

您是如何处理时钟测功机弹性问题的?

谢谢!

0 投票
1 回答
1047 浏览

ruby-on-rails - 安排发条仅在一年中的特定日期运行

我一直在尝试安排clockwork仅在当天运行的作业,例如。2 月 14 日。但我不确定这是否可能,因为文档格式没有这种可能性。

我知道我可以做这样的事情:

但我想避免每天不必要的验证。

有任何想法吗?

谢谢你。

0 投票
0 回答
393 浏览

ruby-on-rails - 使用 Resque 排队重复作业的发条

我正在使用数据库事件和 resque 对特定任务进行排队,但它看起来像是多次将作业排队:

注意时间戳,它会在每分钟(来自对象的时间戳)对作业进行一次排队,并在发条与数据库同步后再次排队。

这是我的clock.rb:

和time_slot.rb:

感谢您的关注!

0 投票
1 回答
425 浏览

ruby-on-rails - 使用 Rails、Sidekiq 和 Clockwork 的 NameError

查看文档中的“示例clock.rb文件” ,您可以看到我的代码完全遵循发条约定(?)。但是,我收到了这个似乎无法修复的错误。我尝试过对不同的变量进行复数和单数化。

这是我的clock.rb文件:

本质上,我希望 Clockwork 将(1)循环遍历每个model_instance 如上所示,(2)通过数据库关联找到frequency_quantityand frequency_period(它们一起构成“时间”),以及(3)调用TwilioWorker右侧的“时间”。

我试过用下面的代码替换块。当我运行时clock.rb,我可以接到来自 Twilio 的电话:

0 投票
2 回答
1217 浏览

ruby-on-rails - 将 ActiveJob 后台作业排队的发条

运行 Rails 4.2.0,所以我使用带有 Sidekiq 后端的 ActiveJob。我需要调用定期安排的后台作业,所以我希望使用 Clockwork,但我还没有看到任何关于如何将它与 ActiveJob 一起使用的示例。

这是我基于 Clockwork Github 示例的 lib/clock.rb:

更新:

我能够让它适用于我的情况,但我对解决方案并不完全满意,因为我必须加载整个环境。我只想要求最低限度的运行 ActiveJobs。

0 投票
1 回答
472 浏览

ruby-on-rails - 带有 Clockwork 触发器的 Sidekiq 但不处理 heroku 上的作业

运行:sidekiq 2.1.17,rails 3.2.21

我正在尝试使用发条来安排一些由 sidekiq 工作人员完成的重复性任务。在开发中运行工头,一切都按计划完美运行。

但是,当我部署到 heroku 时,我会在适当的时间在日志中收到“Triggering 'NameWorker.perform_async'”消息,但是相应的作业实际上并没有运行。

当我改为在控制器操作中调用 NameWorker.perform_async 时,作业会正常运行。我试图安排的作业只包含 puts 语句来验证它们是否正在工作。有人对我做错了什么有任何想法吗?提前致谢。

0 投票
1 回答
210 浏览

ruby - Clockwork 是否需要自己的流程?

我见过人们在几个不同的地方说发条应该在自己的测功机上运行,​​procfile 可能看起来像这样(heroku 的示例):

有什么理由不和工人在同一个测功机上运行它吗?使用看起来像这样的过程:

这种方式似乎工作得很好,但我想知道人们说不要这样做的根本原因。任何指导将不胜感激。提前致谢。

0 投票
1 回答
628 浏览

ruby-on-rails - 将时钟进程与 Docker 上的 sidekiq 工作人员分开

我目前正在努力将我的环境从 Heroku 移开,并且我的部分应用程序正在运行一个时钟进程,该进程启动了 Sidekiq 后台作业。

据我了解,Sidekiq 由一个客户端和一个服务器组成,客户端发送作业以排队到 Redis 中,服务器拉出队列的请求并处理它们。我现在正在尝试将我的应用程序拆分为 Docker 上的以下容器: - Redis 容器 - 时钟容器(使用 Clockwork gem) - 工作容器 - Web 应用程序容器(Rails)

但是,我不确定应该如何拆分这个 Sidekiq 服务器和客户端。本质上,时钟容器需要在其上运行 Sidekiq,以便客户端可以每隔一段时间将作业发送到 Redis 队列。但是,工作容器也应该在它们上运行 Sidekiq(虽然是服务器),以便它们可以处理作业。我认为在不同容器之间划分职责应该是很可能的,因为 Heroku 允许您将其划分为各种 dyno。

我可以想象一种方法是分配时钟容器来拉出一个不存在的队列,这样它就永远不会从队列中拉出任何作业,然后将工作人员设置为拉出一个存在的队列。但是,这对我来说似乎不是最理想的方法,因为它仍然会检查这个不存在的队列中的新作业。

关于我如何开始做这件事的任何提示或指南?

0 投票
0 回答
294 浏览

ruby-on-rails - 发条未登录到 Heroku 控制台

我正在使用 Clockwork gem 来运行一系列 rake 任务。一切看起来都不错,但似乎puts命令没有出现在日志中,只是想知道是否有人知道为什么?

0 投票
1 回答
973 浏览

ruby-on-rails - 给定 :at => "some time" 时发条宝石不运行工作

我正在尝试为经常性工作设置发条。(Rails 4.2)app/clock.rb 中gem 自述文件中的以下代码有效,每 30 秒触发一次后台任务并发送电子邮件。

如果我将重复声明替换为以下内容,则它不起作用。

有什么想法吗?我搜索了其他有此问题的人,但找不到任何问题。我正在使用带活动作业的延迟作业进行排队。谢谢