Rails 6.1部署Heroku后任务走Async而非Sidekiq问题求助
排查思路
- 首先核对
config/environments/production.rb中的配置语法:正确配置应为config.active_job.queue_adapter = :sidekiq,注意active_job与queue_adapter之间是英文点号,而非下划线,语法错误会导致配置不生效。 - 确认Heroku运行环境:执行
heroku config:get RAILS_ENV确认返回值为production,若环境变量被修改为其他值,production.rb的配置不会加载。 - 检查初始化文件拼写:你提供的redis.rb路径写为
intializers/redis.rb,正确目录名应为initializers,拼写错误会导致初始化文件完全不加载,核对sidekiq.rb和redis.rb的路径、文件名是否完全正确。 - 排查配置覆盖情况:检查是否存在其他初始化文件、具体任务类中单独指定了
self.queue_adapter = :async,局部配置优先级高于全局配置,会覆盖production.rb的设置。 - 确认Sidekiq gem加载范围:检查Gemfile中
sidekiq相关依赖没有被限定在development/test组,生产环境可正常加载Sidekiq。 - 验证REDIS_URL环境变量:执行
heroku config确认REDIS_URL变量存在且值正常,若变量缺失,sidekiq.rb中的条件判断会跳过配置,Sidekiq无法正常初始化会回退到Async适配器。 - 临时增加调试逻辑:可在生产环境的路由中临时加如下接口,访问后确认当前使用的适配器类型:
get '/debug_adapter' => proc { [200, {}, [Rails.application.config.active_job.queue_adapter.name.to_s]] }
内容的提问来源于stack exchange,提问作者downtownott
相关产品推荐
相关产品推荐

