ruby-on-rails Sidekiq没有运行排队的作业(Rails 7 + Redis + Sidekiq + Docker)

2w3rbyxf  于 2022-11-19  发布在  Ruby
关注(0)|答案(2)|浏览(170)

正如标题所说,我在docker中运行了3个容器,1个用于rails,1个用于postgres db,1个用于redis。我可以在Job.perform_async中对作业进行排队,但由于某种原因,我的作业无限期地停留在排队中。我检查了一下,我的Redis容器已经启动并运行。
我的工作:

class HardJob
  include Sidekiq::Job

  def perform(*args)
    puts 'HardJob'
  end
end

sidekiq的初始值设定项:

Sidekiq.configure_server do |config|
    config.redis = { url: (ENV["REDIS_URL"] || 'redis://localhost:6379') }
end 
  
Sidekiq.configure_client do |config| 
    config.redis = { url: (ENV["REDIS_URL"] || 'redis://localhost:6379') }
end

我的docker-compose:

version: '3.0'

services:
  web:
    build: .
    entrypoint: >
      bash -c "
      rm -f tmp/pids/server.pid
      && bundle exec rails s -b 0.0.0.0 -p 3000"
    ports:
      - 3000:3000
    volumes:
      - .:/src/myapp
    depends_on:
      - db
      - redis
    links:
      - "db:db"
    environment:
      REDIS_URL: 'redis://redis:6379'
  db:
    image: postgres:11
    environment:
      POSTGRES_PASSWORD: 'postgres'
    volumes:
      - db_data:/var/lib/postgresql/data
    ports:
      - 5432:5432
  redis:
    image: "redis"
volumes:
  db_data:
  redis:
    driver: local

我还在我的3个环境中设置了config.active_job.queue_adapter = :sidekiq
有什么线索吗?先谢谢了

更新

看起来在我的Rails终端中运行sidekiq -q default起作用了。我如何配置Docker总是运行sidekiq?

bzzcjhmw

bzzcjhmw1#

Sidekiq是一个独立的进程,需要独立启动,就像web服务器进程一样。

sidekiq:
  depends_on:
    - 'db'
    - 'redis'
  build: .
  command: bundle exec sidekiq
  volumes:
  - .:/src/myapp
  environment:
    - REDIS_URL_SIDEKIQ=redis://redis:6379/1

或者--当你能够使用最新版本的Sidekiq(〉= 7.0)时--你可能想尝试一下新的Sidekiq embedded mode,它和你的puma Web服务器一起运行Sidekiq。

tct7dpnv

tct7dpnv2#

由于某种原因,Sidekiq正在查找错误的队列名称。请尝试将其添加到您的 config/sidekiq.yml 文件中。

:queues:
  - default

相关问题