【发布时间】: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