【问题标题】:Sidekiq using the incorrect url for redisSidekiq 为 redis 使用了不正确的 url
【发布时间】:2017-06-19 13:39:37
【问题描述】:

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

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)

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

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:

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

此时我被难住了。我已经完全删除了运行docker-compose build 然后docker-compose up 多次运行的所有现有容器,没有任何变化。

我已经在我的应用程序文件夹中进行了全局搜索,寻找对 127.0.0.1:6379localhost:6379 的任何剩余引用,但没有找到任何命中,所以我不确定为什么 sidekiq 一直在 127.0.0.1 上寻找 redis这一点。

【问题讨论】:

  • localhost:6379 是 sidekiq 在不存在其他配置时使用的默认配置。所以问题是为什么 sidekiq 忽略了您的配置..config/initializers/sidekiq.rb 中还有其他内容吗?还是整个文件?
  • @eiko 这就是我提供的全部文件内容。

标签: ruby-on-rails ruby docker docker-compose sidekiq


【解决方案1】:

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

def determine_redis_provider
  ENV[ENV['REDIS_PROVIDER'] || 'REDIS_URL']
end

如果:url 没有在config 中定义,sidekiq 会查看环境变量REDIS_URL。您可以尝试将其设置为您的网址以获得简单的解决方法。要使其与 docker 一起使用,您只需将 REDIS_URL='redis://redis:6379/0' 添加到您的撰写文件中即可。详情可见here

【讨论】:

  • 我会试试这个...你有参考链接吗?另外,放置此代码的最佳位置是哪里?
  • @Godzilla74 更新了我的答案,提供了有关如何使用 ENV 变量的更多信息和更清晰的信息。
  • 我不确定发生了什么...甚至很难在docker-compose.yml 中设置环境变量。我还尝试将信息放在具有 docker-compose.yml 引用的 .env 文件中,但仍然是相同的错误。
  • @Godzilla74 在这一点上,也许我们应该开始对错误消息本身持怀疑态度。也许 sidekiq is 访问您的 redis 服务器并且无法连接,但错误消息由于不相关的原因报告了错误的 URL。你能在任何地方查看 redis 日志,看看是否有连接命中它吗?
  • @eiko 你误解了 REDIS_PROVIDER 变量。它不应该是 URL。 github.com/mperham/sidekiq/blob/master/lib/sidekiq/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-03
  • 2015-02-24
  • 2020-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
相关资源
最近更新 更多