2015-12-10 7 views
10

Sto cercando di far funzionare Flask con Celery con Sqllite come backend. Con questo codice, però:Celery + Flask con Sqllite come broker, errore quando si chiama task

CELERY_BROKER_URL = 'sqla+sqlite:///' + os.path.join(basedir, 'celery.db') 

def make_celery(app): 
    celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL']) 
    celery.conf.update(app.config) 
    TaskBase = celery.Task 
    class ContextTask(TaskBase): 
     abstract = True 
     def __call__(self, *args, **kwargs): 
      with app.app_context(): 
       return TaskBase.__call__(self, *args, **kwargs) 
    celery.Task = ContextTask 
    return celery 

Dopo l'avvio di un lavoratore, I get this error when trying to call a dummy task:

error: [Errno 10061] No connection could be made because the target machine actively refused it 

Codice:

@app.route('/test') 
def test(): 
    t = add_together.delay(100,200) 
    return str(t.wait()) 

Cosa c'è di sbagliato? Ho provato a cercare su google qualsiasi combinazione di Sqllite/SQLAlchemy/Flask/Celery, ma non sono riuscito a trovare una soluzione.

risposta

0
error: [Errno 10061] No connection could be made because the target machine actively refused it 

L'errore di solito indica che la porta di destinazione non è disponibile o bloccata da una sorta di firewall.

File "C:\Users\Robus\banking_virtenv\lib\site-packages\amqp\transport.py", line 95, in __init__ 
     raise socket.error(last_err) 
    error: [Errno 10061] No connection could be made because the target machine actively refused it 

Sembra che stia cercando di connettersi utilizzando un trasporto AMQP. Si prega di verificare la configurazione.

+0

corretta, ho capito l'errore. Tuttavia, non dovrebbe cercare di utilizzare il database SQLite? O mi sta sfuggendo qualcosa? – Robus

+0

@Robus Anche questa è la mia domanda. Dovrebbe provare a usare SQLite, non AMQP. Quindi probabilmente il problema è con come hai configurato Celery. – masnun

3

Come si può vedere nella traccia, l'app sta ancora tentando di connettersi a rabbitmq-server. Ciò significa che non è configurato correttamente. Non ho capito perché stai utilizzando CELERY_BROKER_URL anziché BROKER_URL. Soluzione rapida può essere, cambiare questa:

celery = Celery(app.import_name, broker=app.config['CELERY_BROKER_URL']) 

a

celery = Celery(app.import_name, 
       broker='sqla+sqlite:///' + os.path.join(basedir, 'celery.db'), 
       backend='db+sqlite:///' + os.path.join(basedir, 'celery_results.db')) 

Andiamo a controllare come funziona