【问题标题】:Sidekiq::Cron::Job throw me uninitialized constant Rufus::Scheduler::CronLine errorSidekiq::Cron::Job 抛出未初始化的常量 Rufus::Scheduler::CronLine 错误
【发布时间】:2018-09-21 15:18:11
【问题描述】:

我正在使用 Ruby on Rails 5.2.0 开发一个系统,我需要每 2 分钟运行一次作业。 我使用sidekiq 进行后台处理,sidekiq-cron 用于调度作业。

我在 Rails 控制台中执行以下行:

job=Sidekiq::Cron::Job.new( name: 'TestWorker_Job', cron: '*/2 * * * *', klass: 'PriceWorker')

这就是答案

=> #<Sidekiq::Cron::Job:0x000055b6d54707e8
@active_job=false,
@active_job_queue_name_delimiter=nil,
@active_job_queue_name_prefix=nil,
@args=[],
@cron="*/2 * * * *",
@fetch_missing_args=true,
@klass="PriceWorker",
@last_enqueue_time=nil,
@message={"retry"=>false, "queue"=>"default", "class"=>"PriceWorker",   "args"=>[]},
@name="TestWorker_Job",
@queue="default",
@queue_name_with_prefix="default",
@status="enabled">

但它给我一个错误:

job.errors
=> ["'cron' -> */2 * * * *: uninitialized constant Rufus::Scheduler::CronLine"]

没有有效的工作。我不知道我做错了什么。 Sidekiq-cron github page 做同样的事情。

【问题讨论】:

标签: rufus-scheduler ruby-on-rails-5.2 sidekiq-cron


【解决方案1】:

sidekiq-cron 未针对正确版本的 rufus-scheduler。要使其再次工作,请将其添加到您的 Gemfile

gem 'rufus-scheduler', '~> 3.4.0'

然后运行$ bundle install rufus-scheduler

【讨论】:

  • Rufus-scheduler 正在使用语义版本控制。 Sidekiq-cron 使用了“幕后”的 rufus-scheduler 功能,该功能在较新的版本中发生了变化。此外,sidekiq-cron 依赖于 rufus-scheduler ">= 3.3.0" 而不是经典的 "~> 3.3",它必然会出现这样的问题。 Rufus-scheduler 不必与下游项目兼容,反之亦然。
  • 感谢您的澄清。我改变了文字。请更改您的反对票,因为该解决方案确实有效。
  • 完成。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
相关资源
最近更新 更多