2017-12-31 258 views
0

私はPythonを初めて使い、実際に私が行ったことを学びたいと思っています。私は別のサイトからデータを引き出し、ウェブサイト経由で公開するPythonスクリプトを持っています。私はHerokuのディストリビューションでDjangoを使用しています。Djangoでのセロリのデモンストレーション

午前中に自動的にスクリプトを実行して情報を更新する必要があります。私はセロリがこれを行うための最良の選択肢であることを見た。私は今セロリの実例を持ち、Djangoで正しく構成されていると信じています。しかし、私はまた、デーモン化と呼ばれるプロセス(ここではhttp://docs.celeryproject.org/en/latest/userguide/daemonizing.html)を実行する必要があり、その結果、セロリの作業員はバックグラウンドで操作できます。

これは私が困惑しているため、これに関するステップバイステップのチュートリアルが見つかりません。私は物事が動作するために、私はこれらのファイルのすべてが必要だと思う:

/etc/init.d/celeryd 
/etc/defaults/celery 
/etc/default/celerybeat 
/project/celery.py 
/project/__init__.py 

私はmanage.pyは私が正しく設定celery.py__init__.pyファイルを持っていると信じてい に位置しているルートディレクトリで始まるこれらのファイルのすべてを持っています。ここで彼らは、次のとおりです。celery.py

from __future__ import absolute_import, unicode_literals 
import os 
from celery import Celery 


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

app = Celery('project') 

# Using a string here means the worker doesn't have to serialize 
# the configuration object to child processes. 
# - namespace='CELERY' means all celery-related configuration keys 
# should have a `CELERY_` prefix. 
app.config_from_object('django.conf:settings', namespace='CELERY') 

# Load task modules from all registered Django app configs. 
app.autodiscover_tasks() 


@app.task(bind=True) 
def debug_task(self): 
    print('Request: {0!r}'.format(self.request)) 

とinit.py:

from __future__ import absolute_import, unicode_literals 

# This will make sure the app is always imported when 
# Django starts so that shared_task will use this app. 
from .celery import app as celery_app 

__all__ = ['celery_app'] 

私が正しく、他の2つのファイルを設定するかどうかはわかりません。ここで私はcelerydのために持っているものです。

CELERYD_NODES=4 
CELERY_BIN="project/celery" 
CELERY_APP="project" 
CELERYD_CHDIR="project/" 

# Extra command-line arguments to the worker 
#CELERYD_OPTS="--time-limit=300 --concurrency=8" 
# Configure node-specific settings by appending node name to arguments: 
#CELERYD_OPTS="--time-limit=300 -c 8 -c:worker2 4 -c:worker3 2 -Ofair:worker1" 

# Set logging level to DEBUG 
#CELERYD_LOG_LEVEL="DEBUG" 

# %n will be replaced with the first part of the nodename. 
CELERYD_LOG_FILE="/var/log/celery/%n%I.log" 
CELERYD_PID_FILE="/var/run/celery/%n.pid" 
CELERYD_USER="celery" 
CELERYD_GROUP="celery" 
CELERY_CREATE_DIRS=1 

、ここではcelerybeatファイルです:

# Absolute or relative path to the 'celery' command: 
CELERY_BIN="project/celery" 
#CELERY_BIN="/virtualenvs/def/bin/celery" 

# App instance to use 
# comment out this line if you don't use an app 
CELERY_APP="project" 
# or fully qualified: 
#CELERY_APP="proj.tasks:app" 

# Where to chdir at start. 
CELERYBEAT_CHDIR="/project/" 

# Extra arguments to celerybeat 
#CELERYBEAT_OPTS="--schedule=/var/run/celery/celerybeat-schedule" 

は、私はまた、私は次の行を置くことになってる場所を正確にはわかりません

export DJANGO_SETTINGS_MODULE="settings" 

/etc/defaults/celeryに何が入るのか、それとも私が必要なのか正確にはわかりません。 私は自分のタスクファイルに何らかの形でCELERY_BEATオプションのメインファイルがあるようにしなければならないとも思います。まだこれを手に入れていないのですが、私はcrontabオプションをここに置くことができますか?

答えて

0

あなたはこれをとする必要はありません。ちょうどあなたのProcfileにセロリコマンドを入れてください。

+0

ありがとうございました。 Herokuの互換性をチェックするとは思わなかった。 – juju

関連する問題