2

でホストされているマシンのサーバーにdjcelery支えられた Django アプリケーションで構成しようとしています。rabbitmqUbuntu 14.04Google Compute Engine

以下を使用してデバッグモードでセロリを起動しようとするとpython manage.py celery worker -B -E --loglevel=debug、コマンドは以下の出力で終了します:

[2016-03-24 12:16:09,568: DEBUG/MainProcess] | Worker: Preparing bootsteps.
[2016-03-24 12:16:09,571: DEBUG/MainProcess] | Worker: Building graph...
[2016-03-24 12:16:09,572: DEBUG/MainProcess] | Worker: New boot order: {Timer, Hub, Queues (intra), Pool, Autoscaler, StateDB, Autoreloader, Beat, Consumer}
[2016-03-24 12:16:09,575: DEBUG/MainProcess] | Consumer: Preparing bootsteps.
[2016-03-24 12:16:09,576: DEBUG/MainProcess] | Consumer: Building graph...
[2016-03-24 12:16:09,577: DEBUG/MainProcess] | Consumer: New boot order: {Connection, Events, Mingle, Tasks, Control, Agent, Heart, Gossip, event loop}
<user>@<gce.host>:~/path/to/my/project$

この問題の原因として何が考えられますか? 同じセットアップがローカルの ubuntu マシンで実行されており、覚えている限り、クラウド サーバーですべての手順を実行しました。


追加情報:私が確認したこと

  1. RabbitMQ サーバーは正常に動作しています。ログファイルからの出力:

=INFO REPORT==== 24-Mar-2016::17:02:14 === AMQP 接続の受け入れ <0.209.0> (127.0.0.1:42326 -> 127.0.0.1:5672)

=INFO REPORT==== 24-Mar-2016::17:02:14 === AMQP 接続の受け入れ <0.219.0> (127.0.0.1:42327 -> 127.0.0.1:5672)

=INFO REPORT==== 2016 年 3 月 24 日::17:02:17 === AMQP 接続の受け入れ <0.229.0> (127.0.0.1:42328 -> 127.0.0.1:5672)

  1. 私のマシンでポート5672が開いています。ここで述べられているように、ポート: tcp:5555tcp:4369、も開いています(安全のために)。tcp:15672tcp:5671

私のプロジェクトでのセロリの構成

インストールceleryしてdjango-celeryパッケージ化します。ユーザーを作成rabbitMQし、コマンドでその権限を設定しました:

sudo rabbitmqctl add_user <user> <password>
sudo rabbitmqctl set_permissions -p / <user> ".*" ".*" ".*"

settings.pyファイルに、以下を追加しました。

import djcelery
djcelery.setup_loader()

MIDDLEWARE_CLASSES = [ 'django.middleware.transaction.TransactionMiddleware',
                       ..]

INSTALLED_APPS = ['djcelery',
                  ..]

celery.pyの内容は次のとおりです。

from __future__ import absolute_import

import os

from datetime import timedelta
from celery import Celery
from celery.schedules import crontab

from django.conf import settings


# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', '<my_project>.settings')

app = Celery('<my_project>')

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('<my_project>.settings')
# app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

app.conf.update(
    CELERY_ACCEPT_CONTENT = ['json'],
    CELERY_TASK_SERIALIZER = 'json',
    CELERY_RESULT_SERIALIZER = 'json',
    BROKER_URL = 'amqp://<user>:<password>@localhost:5672//',
    # BROKER_URL = 'django://',
    CELERY_RESULT_BACKEND = "amqp",
    CELERY_IMPORTS = ("<module1>.tasks", "<module2>.tasks.tasks", "<module3>.tasks.tasks"),
    CELERY_ALWAYS_EAGER = False,
    # CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
    # CELERY_TIMEZONE = 'Europe/London'
    CELERY_TIMEZONE = 'UTC',
    CELERYBEAT_SCHEDULE = {
        'debug-test': {
            'task': '<module1>.tasks.test_celery',
            'schedule': timedelta(seconds=5),
            # 'args': (1, 2)
        },
    }
)
4

1 に答える 1

3

最後に、これを修正することができました。celeryシステムのとdjango-celeryパッケージのバージョンが異なっていました。

ubuntu@my-host:~/path/to/project$ pip freeze | grep celery
celery==3.1.21
django-celery==3.1.17

セロリのバージョンを変更して3.1.17修正しました。pipのパッケージ バージョンを変更するには、次を使用します。

ubuntu@my-host:~/path/to/project$ sudo pip install -I celery==3.1.17
于 2016-03-24T21:39:56.187 に答える