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

多API项目Sidekiq服务端执行错误API代码问题咨询

Sidekiq任务执行逻辑与问题修复方案

一、Sidekiq Server任务执行逻辑

  • Sidekiq Server进程启动时会完整加载当前运行环境的Rails项目代码,之后连接配置指定的Redis实例,监听对应命名空间下的任务队列。
  • 当从Redis中拉取到任务时,Sidekiq会直接在当前已加载的代码环境中匹配任务指定的Worker类,调用其perform方法执行逻辑。
  • Redis命名空间的作用仅为隔离不同业务的任务存储,不会自动关联对应项目的代码环境,代码环境完全由Sidekiq进程启动时加载的代码库决定。

二、现有配置的错误点

你当前的问题核心是两个Sidekiq进程加载的是同一份代码,和namespace配置无关:

  1. 查看docker-compose.yml中两个Sidekiq服务的配置,build字段均为当前目录、volumes也均挂载当前目录代码,意味着sidekiq_ignite和sidekiq_super_admin两个进程加载的是完全相同的代码,只会有其中一个项目的Worker类定义,另一个项目的任务执行时自然找不到对应常量。
  2. 额外小问题:你API服务配置的REDIS_URL_SIDEKIQ中db段用了字符串(/ignite、/super_admin),而Redis的数据库为数字索引(默认支持0-15),非数字的db值会被解析为默认的0,可能导致不必要的存储冲突。

三、修复方案

1. 修正Sidekiq服务的构建与挂载配置

让两个Sidekiq进程分别加载对应API项目的代码,修改docker-compose.yml中Sidekiq相关配置如下:

sidekiq_ignite:
  depends_on:
    - db
    - redis
  build: ../ccp-ignite-api-gmv/. # 改为Ignite API的代码路径
  command: bundle exec sidekiq
  volumes:
    - ../ccp-ignite-api-gmv/.:/src # 挂载Ignite API代码
  environment:
    - REDIS_URL_SIDEKIQ=redis://redis:6379/1 # 改为数字db
    - REDIS_NAMESPACE_SIDEKIQ=ignite

sidekiq_super_admin:
  depends_on:
    - db
    - redis
  build: ../ccp-super-admin-api-gmv/. # 改为超级管理员API的代码路径
  command: bundle exec sidekiq
  volumes:
    - ../ccp-super-admin-api-gmv/.:/src # 挂载超级管理员API代码
  environment:
    - REDIS_URL_SIDEKIQ=redis://redis:6379/2 # 改为不同的数字db
    - REDIS_NAMESPACE_SIDEKIQ=super_admin

2. 同步API服务的Redis配置

将两个API服务的REDIS_URL_SIDEKIQ也改为对应数字db,和Sidekiq侧配置保持一致即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:18:05