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

Rails 5.2.4升级至6.1后Delayed Job任务入队但未被执行问题求助

排查步骤

  • 第一步:校验队列名匹配性
    Rails 6.1对ActiveJob队列名的处理逻辑有变更,首先在Rails控制台执行以下代码确认入队任务的实际队列名:
    # 随便创建一个测试任务入队
    TestJob.perform_later
    # 查看最后一条入队任务的队列字段
    puts Delayed::Job.last.queue
    
    确认输出的队列名是否带有你配置的前缀ukcil_development_,如果没有则说明queue_name_prefix配置未生效,检查配置加载优先级。
  • 第二步:修正QUEUES通配符配置
    delayed_job 4.1.9版本对QUEUES=*的通配符匹配规则做了调整,无法自动匹配带前缀的队列。你可以修改环境变量为带前缀的通配规则:
    QUEUES=ukcil_development_*
    
    也可以启动时显式指定所有队列:
    bin/delayed_job --queues=mailers_h,mailers_l,general_h,general_l --queue-name-prefix=ukcil_development -n 1 start
    
  • 第三步:开启delayed_job详细日志排查
    在config/initializers/delayed_job.rb中添加日志配置,输出worker的轮询细节:
    Delayed::Worker.logger = Logger.new(Rails.root.join('log', 'delayed_job.log'))
    Delayed::Worker.logger.level = Logger::DEBUG
    Delayed::Worker.raise_signal_exceptions = :term
    
    重启worker后查看log/delayed_job.log,确认worker是否在正常轮询队列,是否有任务匹配失败的相关日志。
  • 第四步:检查delayed_job表结构完整性
    跨版本升级delayed_job后需要执行升级迁移,避免字段缺失导致的静默读取失败:
    rails generate delayed_job:upgrade
    rails db:migrate
    
    执行完成后重启delayed_job进程验证任务是否正常执行。
  • 第五步:校验任务执行时间配置
    检查入队任务的run_at字段是否大于当前系统时间,同时确认没有配置Delayed::Worker.delay_jobs = false之类的全局跳过配置,也没有设置Delayed::Worker.max_run_time等参数把正常任务判定为超时。

内容的提问来源于stack exchange,提问作者Deep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:05