使用 Whenever Gem 调用活动作业

Calling Active Job Using Whenever Gem

这是一份活跃的工作:

# app/jobs/upload_evidence_job.rb

class UploadEvidenceJob < ApplicationJob
  queue_as :default

  def perform(*args)
    UploadRequest.pull_messages
    ...
  end
end

这是我的配置文件:

set :output, "log/cron_log.log"
env :PATH, ENV['PATH']

every 1.minutes do
  runner 'UploadEvidenceJob.perform_later'
end

我正在运行以下命令写入cron,工作正常。

$ whenever --update-crontab --set environment=development

问题是作业不是从 cron 调用的,而它是从 rails 控制台运行的。

我认为在 cron 的情况下不会加载活动作业,我需要在某处 require 它吗?

首先确保 cron runner 正在运行 - 在 cron 环境中是不同的,因为没有 shell 会话。例如 - 如果您使用的是 RVM - 您需要 ruby binstubs 并且可能是 bundle 命令的完整路径。 然后手动尝试生成的 运行 cron 命令(请参阅 crontab -l 以了解您 运行 的用户)

还每分钟旋转 rails 只是为了排队作业 - 不是很理想,您可以使用 sidekiq-scheduler(如果您使用的是 sidekiq)或其他 ruby 调度程序这样做