我有一种感觉,这是 Rails 中的疑病症的等价物……但我看了一眼 tail -f logs/development.log
,然后被输出催眠了:
Delayed::Backend::ActiveRecord::Job Load (0.8ms) UPDATE "delayed_jobs" SET locked_at = '2016-08-26 12:49:09.594888', locked_by = 'host:ghost pid:4564' WHERE id IN (SELECT "delayed_jobs"."id" FROM "delayed_jobs" WHERE ((run_at <= '2016-08-26 12:49:09.594275' AND (locked_at IS NULL OR locked_at < '2016-08-26 08:49:09.594332') OR locked_by = 'host:ghost pid:4564') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1 FOR UPDATE) RETURNING *
Delayed::Backend::ActiveRecord::Job Load (0.5ms) UPDATE "delayed_jobs" SET locked_at = '2016-08-26 12:49:14.651262', locked_by = 'host:ghost pid:4564' WHERE id IN (SELECT "delayed_jobs"."id" FROM "delayed_jobs" WHERE ((run_at <= '2016-08-26 12:49:14.650707' AND (locked_at IS NULL OR locked_at < '2016-08-26 08:49:14.650765') OR locked_by = 'host:ghost pid:4564') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1 FOR UPDATE) RETURNING *
Delayed::Backend::ActiveRecord::Job Load (0.5ms) UPDATE "delayed_jobs" SET locked_at = '2016-08-26 12:49:19.716179', locked_by = 'host:ghost pid:4564' WHERE id IN (SELECT "delayed_jobs"."id" FROM "delayed_jobs" WHERE ((run_at <= '2016-08-26 12:49:19.715433' AND (locked_at IS NULL OR locked_at < '2016-08-26 08:49:19.715494') OR locked_by = 'host:ghost pid:4564') AND failed_at IS NULL) ORDER BY priority ASC, run_at ASC LIMIT 1 FOR UPDATE) RETURNING *
这运行...每五秒。所以……呃,那是……正常吗?
我突然想到这是延迟工作必须工作的方式,通过根据时间戳检查工作,所以这只是它在做它的事情,但我没有找到像样的书面证据。
如果是这样......我的第二个问题是这不会在我的 Heroku 实例上烧钱吗?我安装了 workless gem 以试图降低成本 - 但我没有看到任何代码进来关闭它......
错误或功能,我如何不让自己破产?
最佳答案
这确实是延迟工作的工作原理。默认sleep_delay
是 5 秒 ( Source Code )。
您可以在初始化程序中配置自定义延迟,如 here 所述.寻找 sleep_delay
.
关于ruby-on-rails - 延迟作业 ActiveRecord::Job Load - 每 5 秒运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39166901/