ошибка docker-compose при подключении к redis + sidekiq - PullRequest
0 голосов
/ 27 сентября 2018

Я пытаюсь построить контейнер с помощью докера, но не могу подключить sidekiq + redis, ошибка говорит sidekiq_1 | Error connecting to Redis on 127.0.0.1:6379 (Errno::ECONNREFUSED), кажется, что sidekiq пытается подключиться к localhost, но так как я строю "в теории" redis + sidekiq + rails+ контейнеры postgres не находятся на локальном хосте, они должны быть в образе redis.

Мой файл docker-compose.yml такой:

version: '3'

services:
  postgres:
    image: postgres:10.5
    volumes:
      - my_app-postgres:/var/lib/postgresql/data

  redis:
    image: redis:4.0.11
    volumes:
      - my_app-redis:/var/lib/redis/data

  web:
    build: .
    command: bundle exec rails server -p 3000 -b '0.0.0.0'
    ports:
      - '3000:3000'
    depends_on:
      - postgres
      - redis
    volumes:
      - .:/my_app
    env_file:
      - .env

  sidekiq:
    build: .
    command: bundle exec sidekiq -C config/sidekiq.yml
    volumes:
      - .:/my_app
    depends_on:
      - postgres
      - redis
    env_file:
      - .env

volumes:
  my_app-postgres:
  my_app-redis:

еще одна интересная информация, которую я вижу в журналеBooting Sidekiq 4.2.10 with redis options {:url=>nil} этот URL может быть причиной проблемы?

в моей среде разработки приложение работает нормально, я пытаюсь «докеризировать» то, что у меня есть.Как я мог сделать эту работу?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2018

Создайте два файла инициализатора:

i) redis.rb

uri = "redis://#{ENV['REDIS_URL']}:#{ENV['REDIS_PORT']}/0/your-app-cache" || 'redis://localhost:6379/0/your-app-cache'

Rails.application.config.cache_store = :redis_store, uri

ii) sidekiq.rb

Sidekiq.configure_server do |config|
  config.redis = { url:  "redis://#{ENV['REDIS_URL']}:#{ENV['REDIS_PORT']}/12" }
end

Sidekiq.configure_client do |config|
  config.redis = { url:  "redis://#{ENV['REDIS_URL']}:#{ENV['REDIS_PORT']}/12" }
end
0 голосов
/ 28 сентября 2018

По умолчанию sidekiq пытается подключиться к 127.0.0.1:6379, но ваш sidekiq находится в другом контейнере, чем redis, поэтому вам необходимо настроить sidekiq для использования redis:6379 в качестве хоста redis, например, с помощью initializer :

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

Подробнее смотрите в документах : https://github.com/mperham/sidekiq/wiki/Using-Redis

Если вы планируете использовать Kubernetes для последующего развертыванияВы можете поместить все контейнеры в модуль, и тогда они смогут подключаться через локальный хост, поскольку контейнеры в одном модуле Kubernetes совместно используют сетевое пространство.Чтобы программировать непосредственно в модуле внутри кластера Kubernetes, вы могли бы работать с инструментом, который я недавно открыл на GitHub и который называется DevSpace: https://github.com/covexo/devspace

...