![](/img/trans.png)
[英]I can't figure out how to serve Static Files using AWS Elasticbeanstalk
[英]I can't get celery working properly (aws elasticbeanstalk)
我正在將django應用程序移動到python3 / django 1.10。 部分流程還包括新部署,我們使用AWS EBS。
在遷移之前芹菜任務是可以的,但現在我無法使任務正常工作。
包裹:
...
celery==3.1.23
Django==1.10.6
django-celery==3.2.1
...
蟒蛇:
Python 3.4.3
在supervisor配置中,我添加了一個運行celery的配置:
[program:celeryd-workers]
; Set full path to celery program if using virtualenv
command=/opt/python/run/venv/bin/python /opt/python/current/app/manage.py celery worker -A app --app=app.celery_app:app -l DEBUG -c 4
directory=/opt/python/current/app
user=nobody
numprocs=1
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
killasgroup=true
stdout_logfile=/var/log/celery-worker.log
stderr_logfile=/var/log/celery-worker.log
environment=PYTHONPATH="/opt/python/current/app/:",PATH="/opt/python/run/venv/bin/:%(ENV_PATH)s",DJANGO_SETTINGS_MODULE="settings.qa"
[program:celeryd-beat]
; Set full path to celery program if using virtualenv
command=/opt/python/run/venv/bin/python /opt/python/current/app/manage.py celery beat -A app --app=app.celery_app:app --loglevel=DEBUG --workdir=/tmp --pidfile=/tmp/celerybeat.pid -s /tmp/celerybeat-schedule.db
directory=/opt/python/current/app
user=nobody
numprocs=1
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
killasgroup=true
stdout_logfile=/var/log/celery-beat.log
stderr_logfile=/var/log/celery-beat.log
environment=PYTHONPATH="/opt/python/current/app/:",PATH="/opt/python/run/venv/bin/:%(ENV_PATH)s",DJANGO_SETTINGS_MODULE="settings.qa"
我的celery_app.py非常簡單:
from __future__ import unicode_literals, absolute_import
from celery import Celery
from django.conf import settings
app = Celery()
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
配置
在EC2實例上,芹菜的設置:
BROKER_URL = 'the aws elastic cache redis url'
CELERY_RESULT_BACKEND = 'djcelery.backends.database:DatabaseBackend'
BROKER_TRANSPORT_OPTIONS = {
'visibility_timeout': 600,
}
BROKER_POOL_LIMIT = 1
CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack']
CELERY_DEFAULT_QUEUE = 'default'
CELERY_QUEUES = {
'default': {
'exchange': 'default',
'exchange_type': 'topic',
'binding_key': 'tasks.#'
}
}
CELERY_ALWAYS_EAGER = True
從實例中我檢查了配置(來自django.conf導入設置),我檢查了實例是否可以使用redis-cli
連接到redis。
基本上如果我運行一個任務,即使是最簡單的一個,比如celery文檔中的add(x,y)
,我也沒有在./manage.py celery events
得到任務,我把事件留給了一對幾個小時,我試圖從應用程序運行任務,但沒有任何反應,似乎卡住了。
No task selected │
│ Workers online: celery@ip-xx-xx-xx-xx │
│ Info: events: 2187 tasks:0 workers:1/1
│ Keys: j:down k:up i:info t:traceback r:result c:revoke ^c: quit
有點奇怪的是,如果我在我的應用程序中的文檔中運行此任務:
In [1]: from app.core.tasks import add
In [2]: result = add.delay(2,2)
In [3]: result.get()
Out[3]: 4
結果顯示,但我看不到事件中的任何任務,如果我檢查celery inspect statistics
...
"pool": {
"max-concurrency": 4,
"max-tasks-per-child": "N/A",
"processes": [
11363,
11364,
11365,
11366
],
"put-guarded-by-semaphore": false,
"timeouts": [
0,
0
],
"writes": {
"all": "",
"avg": "0.00%",
"inqueues": {
"active": 0,
"total": 4
},
"raw": "",
"total": 0
}
},
....
似乎沒什么用。
當然這個過程正在運行:
[ec2-user@xxx]$ ps aux | grep "celery"
nobody 11350 0.0 3.7 251484 77408 ? S 08:11 0:01 /opt/python/run/venv/bin/python /opt/python/current/app/manage.py celery beat -A app --app=app.celery_app:app --loglevel=DEBUG --workdir=/tmp --pidfile=/tmp/celerybeat.pid -s /tmp/celerybeat-schedule.db
nobody 11351 0.1 3.8 247804 79848 ? S 08:11 0:07 /opt/python/run/venv/bin/python /opt/python/current/app/manage.py celery worker -A app --app=app.celery_app:app -l DEBUG -c 4
nobody 11363 0.0 3.4 243876 70956 ? S 08:11 0:00 /opt/python/run/venv/bin/python /opt/python/current/app/manage.py celery worker -A app --app=app.celery_app:app -l DEBUG -c 4
nobody 11364 0.0 3.4 243876 71024 ? S 08:11 0:00 /opt/python/run/venv/bin/python /opt/python/current/app/manage.py celery worker -A app --app=app.celery_app:app -l DEBUG -c 4
nobody 11365 0.0 3.4 243876 71024 ? S 08:11 0:00 /opt/python/run/venv/bin/python /opt/python/current/app/manage.py celery worker -A app --app=app.celery_app:app -l DEBUG -c 4
nobody 11366 0.0 3.4 243876 71024 ? S 08:11 0:00 /opt/python/run/venv/bin/python /opt/python/current/app/manage.py celery worker -A app --app=app.celery_app:app -l DEBUG -c 4
和日志:
[ec2-user@xxxx log]$ tail /var/log/celery-worker.log
[2017-03-14 20:34:45,126: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2017-03-14 20:34:50,124: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2017-03-14 20:34:55,125: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2017-03-14 20:35:00,124: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2017-03-14 20:35:05,125: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2017-03-14 20:35:10,124: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2017-03-14 20:35:15,125: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2017-03-14 20:35:20,124: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2017-03-14 20:35:25,125: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
[2017-03-14 20:35:30,124: DEBUG/MainProcess] pidbox received method enable_events() [reply_to:None ticket:None]
芹菜打敗了:
[ec2-user@xxxx log]$ tail /var/log/celery-beat.log
>>>> Testing: False
celery beat v3.1.23 (Cipater) is starting.
__ - ... __ - _
Configuration ->
. broker -> redis://qa-redis.xxxx:6379//
. loader -> celery.loaders.app.AppLoader
. scheduler -> celery.beat.PersistentScheduler
. db -> /tmp/celerybeat-schedule.db
. logfile -> [stderr]@%DEBUG
. maxinterval -> now (0s)
你知道我做錯了什么嗎?
您的設置文件具有CELERY_ALWAYS_EAGER = True
,這基本上意味着它將跳過隊列並在本地運行任務。 因此,您無需看到任何事件即可獲得結果。 看看http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-task_always_eager
我嘗試刪除該設置並從那里開始工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.