2016-12-28 13 views
3

Я использую redis server и sidekiq для моих хрон рабочих мест но некоторое время sidekiq автоматически убивает на внутреннем интерфейсе.Start Sidekiq автоматически, если он не находится в рабочем состоянии - Rails

Я хочу перезагрузить sidekiq из действия моего контроллера или автоматически, когда он убивает, не останавливая мой сервер приложений рельсов.

Просьба предложить мне, как я могу справиться с этой проблемой?

ответ

2

Вы можете проверить sidekiq и Redis сервер работает или не работает по:

def redis_connected? 
    !!Sidekiq.redis(&:info) rescue false 
    end 

    def sidekiq_connected? 
    ps = Sidekiq::ProcessSet.new 
    ps.size > 0 ? true : false 
    end 

, и вы также можете начать с контроллера, но это не лучший способ, потому что он начнет sidekiq но убить сервера рельсы.

def start_sidekiq 
    system "redis-server &" if !redis_connected? 
    system "bundle exec sidekiq -d" if !sidekiq_connected? 
    flash[:sidekiq_notification]="Starting server... Please refresh after few seconds" 
    redirect_to :back 
    end 

или установить и использовать инструмент для мониторинга сервера

+0

Спасибо за ваш ответ nitisha, он решает мою половинную проблему работы sidekiq с моего контроллера, но это создает большую проблему, которая убивает мое приложение rails :( –

+0

установить и использовать средство мониторинга сервера – Nitisha

+0

Amazing .... Yaa это работает ... Большое спасибо @Nitisha –

1

Не должно быть ответственности ваших приложений за запуск внешних программ.

Установите и используйте средство мониторинга сервера, например bluepill или god, чтобы убедиться, что все зависимости запущены.

+0

Спасибо за предложение, но если мне нужно управлять из моего приложения, как я могу справиться? Есть идеи ?? –

1

Я считаю, что это неправильный способ сделать это.

Я предлагаю вам настроить систему мониторинга, которая автоматически запустит ваших неудачников - вы можете использовать God, Monit или все, что вам нравится.

Однако, если вы НАСТОЯЩЕМУ это нужно, вы можете выполнять системные вызовы из рубина - просто обернуть его в `` или %x{} (например %x{ bundle exec sidekiq })