2012-10-10 41 views
16

estoy usando Sidekiq para mis trabajos en segundo plano:trabajador Sidekiq no conseguir disparado

Tengo una aplicación trabajador/trabajadores/data_import_worker.rb

class DataImportWorker 
include Sidekiq::Worker 
sidekiq_options retry: false 

    def perform(job_id,file_name) 
    begin 
    #Some logic in it ..... 
    end 
end 

llamado desde un archivo lib/parse_excel. rb

def parse_raw_data 
     #job_id and #filename are defined bfr 
     DataImportWorker.perform_async(job_id,filename) 
    end 

tan pronto como los activa de mi acción de la worke r no se está llamando ... Redis se está ejecutando en localhost:6379

Alguna idea de por qué esto debe estar sucediendo. El entorno es Linux.

+0

¿Está corriendo sidekiq? ¿Qué dice en el registro? ¿Revisó redis? ¿El trabajo se agregó a la cola? ¿Predeterminado? – Roman

+0

@Roman: ¡Gracias por responder! sí sidekiq y redis ambos se están ejecutando ... el trabajo tampoco se está agregando a la cola predeterminada ... pero cuando desencadenar trabajo desde la consola funciona – AnkitG

+0

Quizás tenga diferentes bases de datos o espacios de nombres cuando se ejecuta en desarrollo y producción. O una cola diferente está configurada. – Roman

Respuesta

28

que tenía un problema similar donde Sidekiq estaba corriendo pero cuando Llamé al perform_async y no hice nada excepto devolver true.

El problema era rspec-sidekiq se añadió a mi ": desarrollo,: Prueba" grupo. Solucioné el problema moviendo rspec-sidekiq al grupo ": prueba" solamente.

+1

Este fue el problema similar en mi caso – AnkitG

+1

Tuve el mismo problema exacto. Tuve que reconstruir mi paquete también: 'bundle install --without test' – keaplogik

+3

Agregué un enlace a esta respuesta en https://github.com/mperham/sidekiq/wiki/Problems-and-Troubleshooting#the-workers- are-not-starting para futura referencia – lkartono

1

Me encuentro con el mismo problema, resulta que el argumento que he pasado en la función perform_async no es apropiado, parece que uno no debe pasar ningún resultado de la consulta en perform_async, debe hacer toda la consulta en la función realizar.

2

Debe especificar el nombre de la cola para la que trabaja.

Ejemplo: sidekiq_options reintento: falso, : cola => data_import_worker

data_import_worker puede ser cualquier nombre que desee darle.

Luego, cuando se van a la interfaz web: yoursite.com/sidekiq, usted será capaz de ver a los trabajadores actuales para la cola "data_import_worker"

0

Mi problema era simplemente tener el archivo de trabajador en la ruta incorrecta.

tiene que estar en "project_root/app/trabajador/worker.rb", no "project_root/trabajador/worker.rb"

Compruebe la ruta del archivo!

+2

/app/workers surely (plural) – mahemoff

6

Inicie sidekiq desde el directorio raíz de su aplicación Rails. Por ejemplo,

paquete exec sidekiq puesta en escena -e -C config/sidekiq.yml

0

es realmente ejecutar varios trabajadores en sidekiq independiente? por ejemplo tengo 2 trabajadores: ProccessWorker CallbackWorker

cuando estoy runnigs sidekiq: exec paquete sidekiq -r ./workers/proccess_worker.rb -C ./config/sidekiq.yml

solo un trabajador al mismo tiempo.

1

Para mí al hacer un perform_later, se pondría en cola pero nunca se eliminará de la cola. Que necesitaba para añadir mi nombre de la cola en el fichero de sidekiq.yml

--- 
:concurrency: 25 
:pidfile: ./tmp/pids/sidekiq.pid 
:logfile: ./log/sidekiq.log 
:queues: 
    - default 
    - my_queue 
0

estaba llamando perform_async(23) en una consola de producción, sin embargo, mi sidekiq se inició en modo puesta en escena.

Después de iniciar el Sidekiq en modo de producción, las cosas han comenzado a funcionar muy bien.

1

Perdí unos buenos 15 minutos en esto. Para comprobar si Sidekiq está cargando correctamente su archivo de configuración (con los nombres de las colas), vaya a la interfaz web en la pestaña Ocupado y encontrará su ID de proceso y debajo encontrará sus colas.

En nuestro caso, hemos escrito mal mailer (la cola correcta de ActiveJob para Mailers es mailers, en plural).

Cuestiones relacionadas