2012-03-08 12 views
5

Sto creando un ambiente multi-tenant postgres. Quindi il client A ha schema_1, B ha schema_2 ecc ..Posso creare automaticamente le code resque

Ora non conosco tutti i client che avrò, quindi ho un semplice compito rake per creare un nuovo schema basato sui dati in un tavolo inquilino .. Tutto perfettamente dinamico: per aggiungere un nuovo cliente, aggiungere un nuovo titolare e fare un rastrello titolare: db: migrare .. tutti i tavoli sono lì e il cliente ha il suo piccolo mondo. (Elenco delle guardie sconosciute, ma piccola quindi rake al momento della registrazione non è un problema)

Tutto buono ...
Tranne lavori in background.
Voglio avere una coda diversa per ogni cliente.

http://blog.kabisa.nl/2010/03/16/dynamic-queue-assignment-for-resque-jobs/ utilizza ancora code codificate. Può scegliere tra due cose che sapevi quando hai scritto il codice, ma non sono ancora molto dinamiche. Non proprio.

Quindi la mia domanda è. Ho una stringa "tenant_1" che descrive il mondo dei miei clienti.
Come posso usare quella stringa per creare una coda che contenga solo lavori per "lui".
Come posso creare code dinamiche reali?

risposta

4

Resque :: Job.create ("client # {client_id}", MyWorker, 3);

Questo funziona per noi.

+2

e come si eliminano queste code al termine? O non è un problema avere 1000 code di client e il 50% di loro sono inattivi – Luccas

8

In caso qualcuno incontri questa domanda come ho fatto, ho trovato una risposta all'interno della fonte.

Resque versione 1.x (stabile) lo elenca in /lib/resque.rb e sembra un metodo migliore per chiamare rispetto all'accesso diretto al modulo Lavoro in Resque.

# This method is considered part of the `stable` API. 
    def enqueue_to(queue, klass, *args) 

Utilizzare come tale, funziona perfettamente per me.

Resque.enqueue_to(:my_queue, MyWorker, :my_argument) 
Problemi correlati