【问题标题】:Sidekiq + sidekiq_scheduler gem (uninitialized constant worker_class::model)Sidekiq + sidekiq_scheduler gem(未初始化的常量worker_class::model)
【发布时间】:2017-09-09 21:21:09
【问题描述】:

我正在开发一个 asyc 工作线程,该线程会按设定的时间表发送电子邮件。我有很多用于此功能的后端功能,但我设置了一个模型来处理管理每封电子邮件的数据。该模型在我们的多租户数据库中循环访问所有租户,并在每天午夜后一分钟抓取所有用户并为他们量身定制电子邮件。我用宝石sidekiq-scheduler

但是,当我通过 sidekiq_scheduler 设置工作线程时,出现以下错误:

NameError: 未初始化的常量 RecurringMailer::EmailScheduler /../lib/tasks/recurring_mailer.rb:6:in `执行'

这是我的工人类 RecurringMailer (lib/tasks/recurring_mailer.rb)

require 'sidekiq-scheduler'
class RecurringMailer
  include Sidekiq::Worker

  def perform
    EmailScheduler.daily_scheduler
    if Date::DAYTIME[Date.today.wday] == "Tuesday"
      EmailScheduler.weekly_scheduler
    end
  end
end

当工作线程尝试首先从模型访问 EmailScheduler.daily_scheduler 的方法时抛出错误

这是 EmailScheduler 模型的基本外壳 (app/assets/models/email_scheduler.rb)

class EmailScheduler < ApplicationRecord
  def self.weekly_scheduler
    ...
  end

  def self.daily_scheduler
    ...
  end
end

这是我的 config/application.rb 文件

module MySite
  class Application < Rails::Application
    config.autoload_paths += %W(#{config.root}/lib)
    config.autoload_paths << Rails.root.join('app', 'field_types')
    config.active_job.queue_adapter = :sidekiq
  end
end

我有一个 yaml 文件设置来管理在 sidekiq 启动 (config/sidekiq.yml) 上启动调度程序

:schedule:
  recurring_mailer:
    cron: '1 0 * * *'
    class: RecurringMailer

当我启动服务器时,我运行

bundle exec sidekiq -r ./lib/tasks/recurring_mailer.rb

关于如何让我的模型与 sidekiq 工作人员很好地配合有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby sidekiq


    【解决方案1】:

    如果你想访问你的模型,你不应该使用 -r 标志运行 sidekiq。以下是文档对此的评价:

    -r, --require [PATH|DIR] Rails 应用程序的位置,需要工作人员或文件

    如果您想加载整个应用程序,只需将其运行为:

    bundle exec sidekiq
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-03
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      相关资源
      最近更新 更多