提问人:teddybear 提问时间:6/25/2023 最后编辑:teddybear 更新时间:6/25/2023 访问量:186
使用 Sidekiq Scheduler 处理作业
Process jobs with Sidekiq Scheduler
问:
我不确定我的 Sidekiq Scheduler 设置缺少什么。我可以手动处理作业,但计划的作业未运行。从 Web UI 中按可正确运行作业。以 sidekiq 开头,显示 Schedules LoadedEnqueue Now
bundle exec sidekiq
宝石文件
gem 'sidekiq', '~> 6.5.4'
gem 'sidekiq-scheduler', '~> 5.0.3'
config/initializers/sidekiq.rb
if Rails.env.test?
require 'sidekiq/testing'
Sidekiq::Testing.fake!
else
Sidekiq.configure_server do |config|
config.average_scheduled_poll_interval = 5
config.on(:startup) do
SidekiqScheduleManager::StartupManager.call
Sidekiq.schedule = Sidekiq.get_all_schedules
end
end
Sidekiq.configure_client do |config|
config.average_scheduled_poll_interval = 5
end
end
创建计划
def schedule_this(day)
# Convert seconds since midnight to a time string,
# The current time doesn't matter, we just need the time at the beginning of the day
time = (Time.current.beginning_of_day + daily_schedule[day].seconds).strftime('%H:%M')
# Schedule the job
Sidekiq.set_schedule(
"notify_#{member.id}_#{day}",
schedule_arg(day, time, member)
)
end
def schedule_arg(day, time, member)
{
# 'every' => ['1w', { 'first_at' => "#{day.capitalize} #{time}" }],
# 'every' => "#{day} at #{time}",
# 'every' => ['1w', { 'first_in' => "#{day} at #{time}" }],
'cron' => Fugit::Nat.parse("every #{day} at #{time}").original,
'class' => 'WaveJob',
'args' => schedule_args_args(member)
}
end
set_schedule
生成这样的记录
{"notify_649754255af1d03b3aecba50_monday"=>{"cron"=>"0 9 * * 1", "class"=>"WaveJob", "args"=>"[some_json]"},
更新 - 添加到块可立即处理作业,但编辑记录的 cron 字符串不会再次更新计划。从控制台重新运行表示 SidekiqScheduler 已禁用。Sidekiq::Scheduler.reload_schedule!
:startup
reload_schedule!
更新 - 已修复。在街区中也只需要Sidekiq::Scheduler.dynamic = true
:startup
答: 暂无答案
评论