2015-12-10 8 views
10

Próbuję skłonić Flask do pracy z Selerem z Sqllite jako zapleczem. Z następującego kodu, ale:Selery + kolba z Sqllite jako brokerem, błąd podczas wywoływania zadania

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 

Po uruchomieniu pracownik, 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 

Kod:

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

Co się stało? Próbowałem googling dowolnej kombinacji Sqllite/SQLAlchemy/Flask/Seler, ale nie udało się znaleźć rozwiązania.

Odpowiedz

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

Błąd zazwyczaj oznacza, że ​​port docelowy jest niedostępny lub zablokowany przez zaporę.

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 

Wygląda na to, że próbuje się połączyć za pomocą transportu AMQP. Sprawdź swoją konfigurację.

+0

Prawidłowe rozumiem błąd. Jednak czy nie powinien on próbować używać bazy danych SQLite? Czy może czegoś brakuje? – Robus

+0

@Robus To też jest moje pytanie. Powinien spróbować użyć SQLite, a nie AMQP. Prawdopodobnie problem dotyczy sposobu, w jaki skonfigurowałeś aplikację Seler. – masnun

3

Jak widać na wykresie, aplikacja wciąż próbuje połączyć się z serwerem rabbitmq. Oznacza to, że nie jest poprawnie skonfigurowany. Nie rozumiem, dlaczego używasz CELERY_BROKER_URL zamiast BROKER_URL. Szybkie rozwiązanie może być, to zmienić:

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

do

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

Sprawdźmy jak to działa