Sidekiq 为 redis 使用了错误的 url

God*_*a74 4 ruby ruby-on-rails sidekiq docker docker-compose

我正在设置我的 Docker 环境并尝试让 sidekiq 与我的其他服务一起启动docker-compose up,但是 sidekiq 在尝试连接到错误的redis URL 时抛出错误:

redis_1    | 1:M 19 Jun 02:04:35.137 * The server is now ready to accept connections on port 6379
sidekiq_1  | Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED)
Run Code Online (Sandbox Code Playgroud)

我非常有信心在我的 Rails 应用程序中没有引用会让 Sidekiq 连接到 localhost 而不是redis在 docker-compose.yml 中创建的服务:

version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/app
    ports:
      - 3000:3000
    depends_on:
      - db
  redis:
    image: redis:3.2-alpine
    command: redis-server
    ports:
      - 6379:6379
    volumes:
      - redis:/var/lib/redis/data
  sidekiq:
    depends_on:
      - db
      - redis
    build: .
    command: bundle exec sidekiq -C config/sidekiq.yml
    volumes:
      - .:/app
    env_file:
      - .env
volumes:
  redis:
  postgres:
Run Code Online (Sandbox Code Playgroud)

config/initializers/sidekiq.rb我对 redis url 进行了硬编码:

Sidekiq.configure_server do |config|
  config.redis = { url: 'redis://redis:6379/0' }
end

Sidekiq.configure_client do |config|
  config.redis = { url: 'redis://redis:6379/0' }
end
Run Code Online (Sandbox Code Playgroud)

在这一点上,我被难住了。我已经完全删除了任何现有的容器,docker-compose build然后docker-compose up多次运行而没有任何变化。

我已经做了全局搜索我的应用程序内的文件夹寻找任何遗留的引用127.0.0.1:6379localhost:6379并得到没有命中,所以我不知道为什么sidekiq被卡住寻找在这一点上127.0.0.1 Redis的。

eik*_*iko 6

我找不到解释为什么会发生这种情况。但我确实在 sidekiq 源代码中注意到了这一点:

def determine_redis_provider
  ENV[ENV['REDIS_PROVIDER'] || 'REDIS_URL']
end
Run Code Online (Sandbox Code Playgroud)

如果 中:url未定义config,sidekiq 会查看环境变量REDIS_URL。您可以尝试将其设置为您的网址,以便轻松解决。要使其与 docker 一起使用,您应该能够简单地添加REDIS_URL='redis://redis:6379/0'到您的撰写文件中。详细信息可以在这里找到

  • @eiko您误解了 REDIS_PROVIDER 变量。它不应该是一个 URL。https://github.com/mperham/sidekiq/blob/master/lib/sidekiq/redis_connection.rb#L103 (2认同)