You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sidekiq-Cron新增FedexGroundCloseWorker生产环境报NameError问题

生产环境sidekiq-cron任务异常排查与解决

问题背景

使用sidekiq-cron调度后台任务,配置文件为config/schedule.yml,加载逻辑位于config/initializers/sidekiq.rb。其他任务运行正常,但新增的ground_close任务(对应FedexGroundCloseWorker)仅在生产环境出现两种异常:

  1. 报错NameError: uninitialized constant FedexGroundCloseWorker
  2. 有时任务显示启动但无实际执行动作
    该任务在staging环境运行正常,版本信息:Ruby 2.1.2、Rails 4.1.1、sidekiq 4.1.2、sidekiq-cron 0.4.3。

排查与解决方案

1. 验证Worker文件与命名规范

Rails 4.x的类自动加载依赖严格的文件名与类名映射,需确保:

  • Worker文件路径为app/workers/fedex_ground_close_worker.rb(下划线命名对应类名的驼峰命名),且生产环境部署后该文件存在,无拼写/大小写错误。
  • 文件内类定义正确:
    class FedexGroundCloseWorker
      include Sidekiq::Worker
    
      def perform
        # 业务逻辑代码
      end
    end
    

2. 强制预加载Worker类

生产环境默认开启config.cache_classes = true,自动加载机制关闭,可能导致sidekiq启动时未加载新增Worker。在config/initializers/sidekiq.rb中添加手动加载逻辑:

# 方式1:单独加载目标Worker
require Rails.root.join('app/workers/fedex_ground_close_worker')

# 方式2:批量加载所有Worker(适合新增多个Worker的场景)
Dir[Rails.root.join('app/workers/**/*.rb')].each { |file| require file }

3. 确认部署后重启sidekiq进程

旧的sidekiq进程不会自动加载新部署的代码,需确保:

  • 每次部署后手动重启sidekiq(根据进程管理工具调整命令,如RAILS_ENV=production sidekiq restart)
  • 若使用Capistrano部署,需在部署脚本中添加sidekiq重启步骤:
    after 'deploy:published', 'sidekiq:restart'
    

4. 检查sidekiq-cron配置正确性

  • 验证config/schedule.yml中ground_close任务的类名无拼写错误:
    ground_close:
      cron: "30 8 * * *" # 你的定时规则
      class: "FedexGroundCloseWorker"
      queue: default
      args: []
    
  • 确认config/initializers/sidekiq.rb中sidekiq-cron的加载逻辑正确:
    schedule_file = Rails.root.join('config/schedule.yml')
    if File.exist?(schedule_file) && Sidekiq.server?
      Sidekiq::Cron::Job.load_from_hash YAML.load_file(schedule_file)
    end
    

5. 排查“任务启动但无执行”问题

  • 在Worker的perform方法开头添加日志,确认是否进入执行逻辑:
    def perform
      Sidekiq.logger.info "[FedexGroundCloseWorker] 开始执行任务"
      # 原有业务逻辑
      Sidekiq.logger.info "[FedexGroundCloseWorker] 任务执行完成"
    end
    
  • 检查生产环境sidekiq日志级别配置,确保info级日志未被过滤。
  • 排查业务逻辑中是否存在生产环境特有的分支判断(如仅在非生产环境执行),或依赖的配置项在生产环境未正确设置。

内容的提问来源于stack exchange,提问作者Tanveer Ahmad Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 00:56:08