Rails / Sidekiq: помогите мне понять дублирование в этом примере `initializers / sidekiq.rb` - PullRequest
0 голосов
/ 02 октября 2018

Я впервые использую Sidekiq в приложении Rails.Я также впервые использую Redis.

Я видел несколько примеров ( Здесь , здесь , здесь ), где initializers/sidekiq.rb содержитследующие строки:

Sidekiq.configure_server do |config|
    config.redis = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" }
end

Sidekiq.configure_client do |config|
    config.redis = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" }
end 

Я пока не смог найти никакой документации, объясняющей, что именно происходит здесь.

Я понимаю, что хэш присваивается config.redis,Хэш имеет URL-адрес, указывающий на сервер Redis, и пространство имен с префиксом sidekiq_app_name_, за которым следует текущая среда.Я предполагаю, что префиксом может быть любая строка по моему выбору - скорее всего, приложение моего приложения.

Чего я не понимаю, так это почему строка повторяется?

Почемуповторяется строка?

Это точно так же.Неужели Rails.env возвращает одно и то же в каждом случае?Это опечатка или дублирование дает эффект?Если да, то в чем смысл дублирования?

1 Ответ

0 голосов
/ 02 октября 2018

Существует библиотека Sidekiq server и библиотека Sidekiq client , и они настраиваются независимо.Сервер отвечает за удаление заданий из очереди и их выполнение.Клиент отвечает за добавление заданий в очередь.Например, при вызове MyWorker.perform_in(5.minutes) используется клиентская библиотека, а не серверная библиотека.

Sidekiq не предполагает, что ваш клиент и сервер расположены на одном хосте или даже в одной кодовой базе.Возможно, вы захотите, чтобы ваши задания Sidekiq выполнялись на одном хосте (или группе хостов), при этом Redis работал локально, а ваше приложение Rails работало на другом хосте (или группе хостов).В этом случае вы должны использовать адрес localhost в конфигурации сервера и удаленный адрес в конфигурации клиента.Если ваши кодовые базы являются отдельными, у вас может не быть Rails в серверной кодовой базе, поэтому вам придется настраивать Redis без Rails.env.

Если вы планируете запускать все вместе на одном хосте, достаточно просто дедуплицировать код:

REDIS_CONFIG = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" }

Sidekiq.configure_server {|config| config.redis = REDIS_CONFIG }
Sidekiq.configure_client {|config| config.redis = REDIS_CONFIG }

Или:

sidekiq_config = proc do |config|
  config.redis = { url: 'redis://localhost:6379/0', namespace: "sidekiq_app_name_#{Rails.env}" }
end

Sidekiq.configure_server &sidekiq_config
Sidekiq.configure_client &sidekiq_config

Или вы можете простоустановите REDIS_PROVIDER или REDIS_URL в родительской среде и вообще пропустите шаг настройки в Ruby!

export REDIS_URL="redis://localhost:6379/0/sidekiq_app_name_${APP_ENV}"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...