首页 > 解决方案 > 将 Sidekiq 与多个 API 一起使用,但 Sidekiq 服务器执行了错误的 API 代码

问题描述

我已经用 docker-compose 构建了一个 Rails 应用程序,如下所示。

例如,API A 创建了作业 A1,该作业由 Sidekiq Client SA 推送到 redis。

API B 创建了作业 B1,由 Sidekiq Client SB 推送到 redis。

但是当这些作业执行时,它只指向 API A 中的应用程序代码。所以作业 B1 失败了,因为它是由 API A 执行的。

我知道这是因为引发了未初始化的常量错误。

我也使用了 redis-namespace,但它仍然指向错误的 API。

你能帮我解释一下 Sidekiq Server 是如何执行作业的吗?以及它如何指向作业所属的正确 API。

非常感谢。

config_redis = {
  url: ENV.fetch('REDIS_URL_SIDEKIQ', 'redis://localhost:6379/0'),
  namespace: ENV.fetch('REDIS_NAMESPACE_SIDEKIQ', 'super_admin')
}

Sidekiq.configure_server do |config|
  config.redis = config_redis
end

Sidekiq.configure_client do |config|
  config.redis = config_redis
end

初始化程序/sidekiq.rb

config_redis = {
  url: ENV.fetch('REDIS_URL_SIDEKIQ', 'redis://localhost:6379/0'),
  namespace: ENV.fetch('REDIS_NAMESPACE_SIDEKIQ', 'ignite')
}

Sidekiq.configure_server do |config|
  config.redis = config_redis
end

Sidekiq.configure_client do |config|
  config.redis = config_redis
end

码头工人-compose.yml

version: "3.9"
services:
  ccp-ignite-api-gmv: # ----------- IGNITE SERVER
    build: ../ccp-ignite-api-gmv/.
    entrypoint: ./entrypoint.sh
    command: WEB 3001
    # command: MIGRATE # Uncomment this if you want to run db:migrate only
    ports:
      - "3001:3001"
    volumes:
      - ../ccp-ignite-api-gmv/.:/src
    depends_on:
      - db
      - redis
    links:
      - db
      - redis
    tty: true
    stdin_open: true
    environment:
      RAILS_ENV: ${RAILS_ENV}
      REDIS_URL_SIDEKIQ: redis://redis:6379/ignite
      REDIS_NAMESPACE_SIDEKIQ: ignite
  ccp-super-admin-api-gmv: # ----------- SUPER ADMIN API SERVER
    build: ../ccp-super-admin-api-gmv/.
    entrypoint: ./entrypoint.sh
    command: WEB 3005
    # command: MIGRATE # Uncomment this if you want to run db:migrate only
    ports:
      - "3005:3005"
    volumes:
      - ../ccp-super-admin-api-gmv/.:/src
    depends_on:
      - db
      - redis
    links:
      - db
      - redis
    tty: true
    stdin_open: true
    environment:
      RAILS_ENV: ${RAILS_ENV}
      REDIS_URL_SIDEKIQ: redis://redis:6379/super_admin
      REDIS_NAMESPACE_SIDEKIQ: super_admin
  db:
    image: mysql:8.0.22
    volumes:
      - ~/docker/mysql:/var/lib/mysql
    command: --default-authentication-plugin=mysql_native_password
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3307:3306"
  redis:
    image: redis:5-alpine
    command: redis-server
    ports:
      - 6379:6379
    volumes:
      - ~/docker/redis:/data
  sidekiq_ignite:
    depends_on:
      - db
      - redis
    build: .
    command: bundle exec sidekiq
    volumes:
      - .:/src
    environment:
      - REDIS_URL_SIDEKIQ=redis://redis:6379/0
      - REDIS_NAMESPACE_SIDEKIQ=ignite
  sidekiq_super_admin:
    depends_on:
      - db
      - redis
    build: .
    command: bundle exec sidekiq
    volumes:
      - .:/src
    environment:
      - REDIS_URL_SIDEKIQ=redis://redis:6379/0
      - REDIS_NAMESPACE_SIDEKIQ=super_admin

标签: ruby-on-railsdocker-composeredissidekiq

解决方案


感谢 st.huber 提醒我,

这种困惑来自我在 2 sidekiq 服务中错误的 docker-compose 配置。我在“build”和“command”中指出了错误的文件夹

前:

sidekiq_ignite:
    depends_on:
      - db
      - redis
    build: .
    command: bundle exec sidekiq
    volumes:
      - .:/src
    environment:
      - REDIS_URL_SIDEKIQ=redis://redis:6379/0
      - REDIS_NAMESPACE_SIDEKIQ=ignite
  sidekiq_super_admin:
    depends_on:
      - db
      - redis
    build: .
    command: bundle exec sidekiq
    volumes:
      - .:/src
    environment:
      - REDIS_URL_SIDEKIQ=redis://redis:6379/0
      - REDIS_NAMESPACE_SIDEKIQ=super_admin

固定的:

sidekiq_ignite:
    depends_on:
      - db
      - redis
    build: ../ccp-ignite-api-gmv/.
    command: bundle exec sidekiq
    volumes:
      - ../ccp-ignite-api-gmv/.:/src
    environment:
      - REDIS_URL_SIDEKIQ=redis://redis:6379/0
      - REDIS_NAMESPACE_SIDEKIQ=ignite
  sidekiq_super_admin:
    depends_on:
      - db
      - redis
    build: ../ccp-super-admin-api-gmv/.
    command: bundle exec sidekiq
    volumes:
      - ../ccp-super-admin-api-gmv/.:/src
    environment:
      - REDIS_URL_SIDEKIQ=redis://redis:6379/0
      - REDIS_NAMESPACE_SIDEKIQ=super_admin


推荐阅读