2015-12-10 27 views
10

Ben Flask ile arka plan olarak Sqllite ile Kereviz çalışmak için çalışıyorum.Broker olarak Sqllite ile Kereviz + Flask, görev çağırırken hata,

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 

bir işçiyi, I get this error when trying to call a dummy task başlattıktan sonra: Ancak şu kod ile

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

Kodu:

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

Sorun ne? Sqllite/SQLAlchemy/Flask/Kereviz herhangi bir kombinasyonu googling denedim, ancak bir çözüm bulamadık.

cevap

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

Hata, genellikle hedef portun bir tür güvenlik duvarı tarafından kullanılamaması veya engellenmesi anlamına gelir.

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 

Bir AMQP aktarımı kullanarak bağlanmaya çalıştığı anlaşılıyor. Lütfen yapılandırmanızı kontrol edin.

+0

Doğru, ben hatayı anlamak çalıştığını kontrol edelim. Ancak, bunun yerine sqlite veritabanını kullanmaya çalışmamalı mıydı? Yoksa bir şey mi özlüyorum? – Robus

+0

@Robus Bu benim de sorum. SQLite, Not AMQP'yi kullanmaya çalışmalıdır. Muhtemelen sorun, Kereviz'i nasıl yapılandırdığınızdır. – masnun

3

İzlemede gördüğünüz gibi, uygulamanız hala rabbitmq-server'a bağlanmaya çalışıyor. Bu uygun şekilde yapılandırılmadığı anlamına gelir. BROKER_URL yerine neden CELERY_BROKER_URL kullanıyorsunuz anlamadım. Hızlı çözüm olabilir, bu değişebilir:

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

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

için en çok