2016-05-24 3 views
0

Когда-то у меня было одно приложение - Cashyy. Он использовал sidekiq. Я развернул его и использовал этот upstart script для управления sidekiq (запуск/перезапуск).Rails: управление несколькими sidekiqs без скрипта upstart

Я решил разместить другое приложение на одном сервере. Приложение (назовем его Giimee) также использует sidekiq.

И вот в чем проблема. Иногда мне нужно перезагрузить sidekiq для Cashyy, но не для Giimee. Теперь, насколько я понимаю, мне нужно будет что-то взломать, используя index вещь (в сценарии upstart и управлении sidekiqs: sudo restart sidekiq index=1) (если я правильно понял).

НО!

У меня есть нулевое желание использовать эти индексы (кошмар для поддержки? Как вам нужно знать, сколько приложений использует sidekiq и не забудьте назначить уникальный индекс для каждого sidekiq. И знать назначенный индекс, если вы хотите перезапустить специфический sidekiq).

Итак, вот вопрос: как я могу изолировать каждый sidekiq (так что мне не нужно было поддерживать index) и до сих пор получить стабильность и удобство выскочки (запуск процесса, перезапуск и т. Д.)?

Или, может быть, я что-то не понимаю, а вещь с index - это состояние?

ответ

1

создаются две службы:

cp sidekiq.conf /etc/init/cashyy.conf 
cp sidekiq.conf /etc/init/glimee.conf 

Отредактируйте при необходимости. sudo start cashyy, sudo stop glimee и т. Д. Теперь у вас будет два полностью отдельных процесса Sidekiq.

1

В качестве альтернативы сценарию выскочки вы можете использовать Capistrano и Capistrano-Sidekiq для управления этими Sidekiqs.

У нас есть Sidekiq, работающий на 3 машинах и имеющий хороший опыт работы с этими двумя библиотеками/инструментами.

Примечание: в настоящее время мы используем старую версию Capistrano (2.15.5)

В нашей архитектуре, три машины немного настроены на развертывании. Это привело нас, чтобы разбить наш Capistrano развернуть сценарии машиной, чтобы мы могли настроить некоторые классы, управлять Sidekiq и т.д. Наши Capistrano файлы структурированы что-то вроде этого:

- config/ 
    - deploy.rb 
    - deploy/ 
    - gandalf.rb 
    - gollum.rb 
    - legolas.rb 

С Capistrano-sidekiq, мы можем контроль, ну, Sidekiq :) в любое время (во время развертывания или иначе). Мы создали аспекты Sidekiq нашего Deploy сценариев следующим образом:

# config/deploy.rb 
# global sidekiq settings 
set :sidekiq_default_hooks, false 
set :sidekiq_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec sidekiq" 
set :sidekiqctl_cmd, "#{fetch(:bundle_cmd, 'bundle')} exec sidekiqctl"  
set :sidekiq_role, :app 
set :sidekiq_pid, "#{current_path}/tmp/pids/sidekiq.pid" 
set :sidekiq_env, fetch(:rack_env, fetch(:rails_env, fetch(:default_stage))) 
set :sidekiq_log, File.join(shared_path, 'log', 'sidekiq.log') 

# config/deploy/gandalf.rb 
# Custom Sidekiq settings 
set :sidekiq_timeout, 30 
set :sidekiq_processes, 1 
namespace :sidekiq do 
    # .. code omitted from methods and tasks for brevity 
    def for_each_process(&block) 
    end 

    desc 'Quiet sidekiq (stop accepting new work)' 
    task :quiet, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do 
    end 

    desc 'Stop sidekiq' 
    task :stop, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do 
    end 

    desc 'Start sidekiq' 
    task :start, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do 
    end 

    desc 'Restart sidekiq' 
    task :restart, :roles => lambda { fetch(:sidekiq_role) }, :on_no_matching_servers => :continue do 
    end  
end 

Когда мне нужно перезапустить один из моих экземпляров Sidekiq, я могу просто пойти на мой терминал и выполнить следующие действия:

$ bundle exec cap gandalf sidekiq:restart 
$ bundle exec cap gollum sidekiq:stop 

Это сделало управление Sidekiq совершенно безболезненным для нашей команды и подумало, что стоит поделить в случае, если что-то подобное поможет вам.

Смежные вопросы