ruby-on-rails - 将 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
解决方案
感谢 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
推荐阅读
- excel - 前装和后装 | Excel中的正态分布柱形图和S曲线
- javascript - Jquery删除多个选择选项上的重复项,同时保持“选定”属性
- elasticsearch - Elasticsearch - 递归嵌套 JSON 对象
- python - 摆脱 Pandas 中的多个名称
- ios - 如何禁用或覆盖在 ios 中启动的应用程序
- java - 如何更改 VSCode 的默认终端
- google-sheets - 将范围导入每第 N 行
- python - 提高循环遍历 pandas 数据帧的效率
- linux - 请求未调用 Scrapy 回调函数
- angular - 角度输入模式验证不起作用