使用 Django / virtualenv 运行芹菜时找不到"__main__"模块



Debian 9.8
virtualenv 16.4.3 Python 3.5.3 Django 2.1.7
芹菜 4.3.0

姜戈-芹菜节拍 1.4.0

当我从我的应用程序目录中运行芹菜命令时,我的 venv 像celery worker -A personnelcelery beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler一样处于活动状态,它按预期工作。我的应用名称是"人员"。

有几个相关的问题,但没有一个与我的完全一样。这是我尝试各种命令时发生的情况。

celery worker从具有 venv 活动的项目目录中启动工作线程,并且看起来应该像文档显示的那样(Redis 正在工作,节拍也可以工作)

/home/www/personnel/venv/bin/python从 proj dir 外部 venv 未激活将我放入一个外壳中,我可以在其中导入芹菜而不会出错

项目外面的/home/www/personnel/venv/bin/celery向我展示了芹菜帮助(用法:芹菜[选项]...

/home/www/personnel/venv/bin/python /home/www/personnel celery worker,根据我的研究,它应该起作用,返回:/home/www/personnel/venv/bin/python: can't find '__main__' module in '/home/www/personnel'

即使使用 -A 标志,也会返回上述错误。

/home/www/personnel/venv/bin/python /home/www/personnel/manage.py celery worker回报:

Unknown command: 'celery'
Type 'manage.py help' for usage.

标准输出日志显示相同的错误。我猜该命令应该在主管发挥作用之前工作。

我从头开始并以相同的结果重新创建了 venv。

# __init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ['celery_app']
# celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
#from celery.schedules import crontab
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'personnel.settings')
app = Celery('personnel')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
; ==================================
; celery worker config
; ==================================
[program:celery]
; full path using virtualenv
command=/home/www/personnel/venv/bin/python /home/www/personnel celery worker -A personnel -I info
directory=/home/www/personnel
;user=dunnoyet
numprocs=1
stderr_logfile=/var/log/celery.out.log
stdout_logfile=/var/log/celery.err.log
autostart=true
autorestart=true
startsecs=10
; need to wait for currently executing tasks to finish at shutdown
; increase if long running tasks
stopwaitsecs = 600
; send the termination signal (SIGTERM) to the whole process group
stopasgroup=true
; set Celery priority higher than default (999)
; so, if rabbitmq is supervised, it will start first
priority=1000
# Project structure based on django cookie cutter
pr_project
|--personnel
|--api/
|--...
|--__init__.py
|--celery.py
|--urls.py
|--views.py
|--wsgi.py
|--requirements
|--...

从项目目录中,它按预期工作,但我无法让它在外面工作或与主管成功启动。

编辑

#personnel/settings.py
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'

正如建议的那样,我尝试了/home/www/personnel/venv/bin/celery worker- 它启动了,但看起来它无法连接到 redis

[2019-04-05 09:18:11,960: ERROR/MainProcess] consumer: Cannot connect to amqp://guest:**@127.0.0.1:5672//: [Errno 111] Connection refused.

使用应用标志/home/www/personnel/venv/bin/celery worker -A personnel

Error:
Unable to load celery application.
The module personnel was not found.

使用主管时,它适用于:

[program:celery]
; full path using virtualenv
command=/home/www/personnel celery worker
directory=/home/www/personnel

从命令行尝试时它不起作用,也许是因为它需要可访问的 Django 设置。

相关内容

  • 没有找到相关文章

最新更新