9

Ho appena iniziato a utilizzare AWS Elastic Beanstalk con la mia app per rails e ho bisogno di utilizzare la gemma di Resque per i processi in background. Tuttavia, nonostante tutti gli sforzi per cercare come eseguire Resque worker su Elastic Beanstalk, non sono stato in grado di capire come?Come è possibile eseguire i processi in background di Rails su Elst Beanstalk AWS?

How can I run Rails background jobs with Resque on AWS Elastic Beanstalk? parla di esecuzione di quelli come servizi in contenitori Elastic Beanstalk, tuttavia, è ancora molto confuso.

Ecco i miei file di ebextentions resque.config:

services: 
    sysvinit: 
    resque_worker: 
    enabled: true 
    ensureRunning: true 
    commands: 
     resque_starter: 
     rake resque:work QUEUE='*' 

EDIT Ora il mio file resque.config assomiglia a questo:

container_commands: 
    resque_starter: "rake resque:work QUEUE='*'" 
services: 
    sysvinit: 
    resque_worker: 
     enabled: true 
     ensureRunning: true 
     commands: 
     resque_starter 

E non è ancora funzionante. EDIT 2

container_commands: 
    resque_starter: 
    command: "rake resque:work QUEUE=sqs_message_sender_queue" 
    cwd: /var/app/current/ 
    ignoreErrors: true 

Ancora mostra 0 lavoratori.

+0

Cosa ti confonde? –

+0

Si consiglia di utilizzare container_commands anziché i comandi. –

+0

Ciò che mi confonde è come eseguire automaticamente il comando "rake resque: work QUEUE = '*'" dopo ogni distribuzione se è vivo kill e rieseguire? Spero sia più specifico –

risposta

4

Prima di tutto, vorrei raccomandare di eseguire resque con l'aiuto di supervisord, questo ti aiuterà a fare in modo che il lavoratore venga riavviato se il processo muore.

su come eseguire il comando quando si fa distribuire ogni volta: Entra da ssh all'istanza beanstalk andare nella cartella:/opt/elasticbeanstalk/ganci/AppDeploy/ Qui trovate l'elenco dei ganci che eseguono ogni volta quando lo fai. Anche qui puoi mettere il tuo script che verrà eseguito ogni volta che lo fai. Inoltre con lo stesso approccio è possibile mettere lo script agli hook responsabili del riavvio del server delle applicazioni e avere la possibilità di riavviare il lavoro in background senza connessione da parte di ssh.

Un'altra opzione, inserisci il comando che avvia il worker in background è utilizzare container_commands anziché comandi.

Inoltre, si prega di dare un'occhiata ai migliori articoli che ho trovato sulla personalizzazione di beanstalk: http://www.hudku.com/blog/tag/elastic-beanstalk/ sarebbe un buon punto di partenza per la personalizzazione dell'ambiente beanstalk per le vostre necessità. \

+0

Mi chiedo se è possibile approfondire l'uso di container_commands? i documenti indicano che vengono eseguiti prima che la versione dell'applicazione venga distribuita, in tal caso, non vedo come sarebbero utili. – dangerousdave

+0

Bene, i comandi sono utili se è necessario eseguire qualche azione prima che l'applicazione venga estratta, in questo momento il server Web è in esecuzione. Dalla scadenza, vengono eseguiti una volta sul nuovo server. commands_commands: quando viene estratto l'applicazione, ma prima che l'applicazione venga distribuita. –

6

Penso che non sia ottimale eseguire le code, come Resque, all'interno degli ambienti Web Elastic Beanstalk. Un ambiente Web è progettato per ospitare applicazioni Web e generare nuove istanze quando il traffico e il carico aumentano. Tuttavia, non avrebbe senso avere più code Resque, ciascuna in esecuzione su una delle istanze.

Elastic Beanstalk offre worker environments destinati al codice host che esegue attività in background. Questi ambienti di lavoro estraggono i lavori da un Amazon SQS queue (che rende obsoleta una soluzione di coda aggiuntiva, come Resque). Una coda Amazon SQS si adatta facilmente ed è più facile da gestire (AWS lo fa per te).

Per utilizzare gli ambienti di lavoro, che vengono forniti con le code Amazon SQS, ha più senso, dato che è pronto all'uso e si adatta perfettamente al paesaggio del fagiolo magico. Esiste anche una gemma, Active Elastic Job, che rende semplice per le applicazioni Rails> = 4.2 eseguire le attività in background negli ambienti di lavoro.

Disclaimer: Sono l'autore di Active Elastic Job.

+2

Gli ambienti di lavoro sembrano un pazzo eccessivo quando si desidera solo eseguire piccole attività periodiche su ciascun server. –

Problemi correlati