ruby sinatra restart sidekiq

ruby - Reiniciando Sidekiq



sinatra restart (1)

¿Cuál es la forma correcta de reiniciar sidekiq. Parece que el código de mis trabajadores se almacena en caché cuando lo inicio, por lo que cada vez que hago un cambio en mis trabajadores, necesito reiniciarlo. Estoy haciendo esto con Ctrl / C, pero el proceso toma mucho tiempo para relajarme y regresar al indicador.

¿Hay una manera de forzar un reinicio con efecto inmediato?

Estoy usando la última versión con Sinatra corriendo a través de POW.


Sidekiq viene con el comando sidekiqctl, que puede detener el PID asociado con su proceso Sidekiq. Pasas el archivo PID y el número de segundos para esperar a que todos los hilos terminen.

Uso de la muestra:

sidekiqctl stop #{rails_root}/tmp/pids/sidekiq_website_crawler.pid 60

Aquí, 60 representa el número de segundos a esperar hasta que todos los subprocesos de Sidekiq hayan terminado de procesarse. Si pasan 60 segundos y no se hacen todos, se eliminan automáticamente.

También recomiendo usar la gema de Dios para monitorear, detener, iniciar y reiniciar Sidekiq.

Una vez que hagas eso, puedes usar bundle exec god stop para detener todos los hilos de sidekiq.

Aquí está mi archivo de Dios, como ejemplo:

rails_env = ENV[''RAILS_ENV''] || "development" rails_root = ENV[''RAILS_ROOT''] || "/home/hwc218/BuzzSumo" God.watch do |w| w.dir = "#{rails_root}" w.name = "website_crawler" w.interval = 30.seconds w.env = {"RAILS_ENV" => rails_env} w.interval = 30.seconds w.start = "bundle exec sidekiq -C #{rails_root}/config/sidekiq_website_crawler.yml" w.stop = "sidekiqctl stop #{rails_root}/tmp/pids/sidekiq_website_crawler.pid 60" w.keepalive # determine the state on startup w.transition(:init, { true => :up, false => :start }) do |on| on.condition(:process_running) do |c| c.running = true end end # determine when process has finished starting w.transition([:start, :restart], :up) do |on| on.condition(:process_running) do |c| c.running = true c.interval = 5.seconds end # failsafe on.condition(:tries) do |c| c.times = 5 c.transition = :start c.interval = 5.seconds end end # start if process is not running w.transition(:up, :start) do |on| on.condition(:process_running) do |c| c.running = false end end w.restart_if do |restart| restart.condition(:restart_file_touched) do |c| c.interval = 5.seconds c.restart_file = File.join(rails_root, ''tmp'', ''restart.txt'') end end end