Come accodare al meglio un processo di lunga durata

Quindi ho un plugin che avvia Ansible per eseguire un’installazione di Discourse (vorrei davvero, davvero, smettere di usare WordPress per gestire gli ordini di installazione!).

Inizialmente, chiamavo fork per avviarla, il che funzionava bene nei test, ma pensavo che dovessi farlo in modo più “alla maniera di Discourse”.

Quindi ho creato un lavoro una tantum per eseguire il processo, ma viene terminato in questo modo:

E, [2020-12-16T12:53:39.662683 #3158277] ERROR -- : worker=0 PID:3158425 timeout (61s > 60s), killing

Ho provato ad aggiungere sidekiq_options queue: 'low' alla classe, e poi alla funzione che esegue il lavoro.

Poi ho saltato l’esecuzione del processo tramite il lavoro e l’ho eseguito direttamente nel modello con

         Discourse::Utils.execute_command(*instructions)

Funziona perfettamente se lo eseguo da rails c, ma in qualsiasi altro modo lo esegua (questo è un ambiente di sviluppo Ubuntu, avviato con ./bin/unicorn), viene terminato.

1 Mi Piace

I lavori una tantum sono lavori che vengono eseguiti, beh, una sola volta. Sembra che tu abbia bisogno di un lavoro regolare che venga schedulato da un trigger, come una richiesta che colpisce un controller.

I lavori regolari possono durare più di 60 secondi, come alcuni fanno nell’uso normale.

1 Mi Piace

Beh, l’ho spostato in un lavoro regolare e ho provato a eseguirlo con ./bin/rails s invece di ./bin/unicorn, ma ancora niente.

Non ha senso, perché so che molti di quei lavori richiedono più di un minuto.

Come stai eseguendo esattamente il job? Puoi incollare la parte rilevante del codice Ruby?

Certo!

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/app/jobs/regular/create_droplet.rb

https://github.com/pfaffman/discourse-pfaffmanager/blob/master/app/models/pfaffmanager/server.rb#L150-L172

Perché stai usando

Jobs::CreateDroplet.new.execute(server_id: id)

invece di

Jobs.enqueue(:create_droplet, server_id: id)

in https://github.com/pfaffman/discourse-pfaffmanager/blob/49f7369b1dc0b1c8f63065b14c92ac7ecc3ab2b3/app/models/pfaffmanager/server.rb#L146?

2 Mi Piace

Ed è per questo che devo fare domande! Sono solo un cavernicolo. (Nessuna offesa per chi vive effettivamente in una caverna.)

Non c’è, ovviamente, nessuna ragione. Non sono riuscito a capire come dovevo chiamarlo!

Grazie mille!

… e continua a funzionare! …

Grazie mille. Ci ho messo almeno un paio d’ore…

Prossimo passo: eseguirlo su un server di produzione vero e proprio…

4 Mi Piace