使用 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 调度程序这样做
这是一份活跃的工作:
# 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 调度程序这样做