2015-12-10 7 views
10

私はFlaskをSqlliteでバックエンドとして動作させようとしています。Celery + Flask with Sqllite with broker、エラー:タスクを呼び出すときにエラーが発生する

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 

労働者、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 

コード:

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

何が悪いのでしょうか?私はSqllite/SQLAlchemy/Flask/Celeryの組み合わせを検索しようとしましたが、解決策を見つけることができませんでした。

答えて

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

このエラーは、通常、ターゲットポートが何らかの種類のファイアウォールによって使用不可能またはブロックされていることを意味します。

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 

AMQPトランスポートを使用して接続しようとしているようです。設定を確認してください。

+0

をどのように動作するか確認してみましょう。しかし、代わりにsqliteデータベースを使用しようとしないでください?または私は何かを逃していますか? – Robus

+0

@Robusそれも私の質問です。 AMQPではなくSQLiteを使用するようにしてください。だからおそらく、問題はあなたがセロリをどのように設定したかである。 – masnun

3

あなたのトレースでわかるように、あなたのアプリはまだrabbitmq-serverに接続しようとしています。つまり、正しく設定されていないことを意味します。 BROKER_URLの代わりに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')) 

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

を私はエラーを理解し、のは、それが正しい