Mirkom63
@Mirkom63
Я программист

Как запустить несколько процессов Sidekiq используя Capistrano?

Использую гем https://github.com/seuros/capistrano-sidekiq

Установил параметр:
set :sidekiq_processes, 2

Выполняю cap production sidekiq:install

00:00 sidekiq:install
      01 mkdir -p /home/app/.config/systemd/user
    ✔ 01 app@00.00.00.00 0.110s
      Uploading /tmp/sidekiq@1.service 100.0%
      02 mv /tmp/sidekiq@1.service /home/app/.config/systemd/user/sidekiq@1.service
    ✔ 02 app@00.00.00.00 0.109s
      03 systemctl --user daemon-reload
    ✔ 03 app@00.00.00.00 0.152s
      Uploading /tmp/sidekiq@2.service 100.0%
      04 mv /tmp/sidekiq@2.service /home/app/.config/systemd/user/sidekiq@2.service
    ✔ 04 app@00.00.00.00 0.105s
    ✔ 03 app@00.00.00.00 0.150s
      05 systemctl --user enable sidekiq
      05 Failed to enable unit: Unit file sidekiq.service does not exist.
    ✘ 05 app@00.00.00.00 0.117s
      06 loginctl enable-linger 
    ✔ 06 app@00.00.00.00 0.128s


У меня создаются sidekiq@1.service и sidekiq@2.service

Потом выполняю cap production sidekiq:start

00:00 sidekiq:start
      01 systemctl --user start sidekiq
      01 Failed to start sidekiq.service: Unit sidekiq.service not found.
    ✘ 01 app@00.00.00.00 0.104s


Происходит ошибка, потому по стандарту гем пытается запустить сервис sidekiq.service, вместо которого у нас два сервиса с другим названием.

Как при sidekiq:start, запустить несколько сервисов? Не обязательно два, у меня может быть и 5 или 10.

Если настраиваю один процесс, то все ок. Создается sidekiq.service, запускается и все работает как должно. В сервисе я так понимаю можно выполнить только одну команду при старте.

Может нужно создать сервисы под каждый процесс генератором и вручную создать sidekiq.service который запустит все остальные? Но тогда как?

UPDATE ВОПРОСА

В общем я немного покопался в исходниках гема и понял вот что:
sidekiq:start запускает только один процесс, если мы хотим провести запуск нескольких процессов, то нужно выполнить sidekiq:restart. Не знаю почему так и зачем, может тут есть смысл который я не понял, но вот так.

Поэтому что я сделал, в deploy.rb добавил:
namespace :deploy do
    after :finishing, 'sidekiq:restart'
end

Единственно, в процессе деплоя все-равно sidekiq оставливет и запускает сервис sidekiq.service и выдает ошибку.

Я не знаю как переопределить дефолтный флоу гема, может кто-то подскажет, как выключить вот эту часть:
Файл в библиотеке: /lib/capistrano/tasks/sidekiq.rake
namespace :sidekiq do
  task :add_default_hooks do
    after 'deploy:starting', 'sidekiq:quiet' if Rake::Task.task_defined?('sidekiq:quiet')
    after 'deploy:updated', 'sidekiq:stop'
    after 'deploy:published', 'sidekiq:start'
    after 'deploy:failed', 'sidekiq:restart'
  end
end
  • Вопрос задан
  • 247 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы