阅读文档本地安装:芹菜值错误:信号仅在主线程中工作



我有一个本地 readthedocs 安装,并在尝试导入项目时收到 ValueError 异常。我使用的是 5.1.0 版,在 Debian buster 上运行 python 3.6 和芹菜 4.1.1(来自需求文件(。

从调试.log:

[19/May/2020 23:31:11] celery.app.trace:124[24]: INFO Task readthedocs.projects.tasks.send_notifications[39551573-cfe1-46c1-b7e2-28bde20fd962] succeeded in 0.005342413205653429s: None
[19/May/2020 23:31:11] celery.app.trace:124[24]: INFO Task readthedocs.oauth.tasks.attach_webhook[119bed10-cacc-450c-bd51-822e96faffd7] succeeded in 0.016763793770223856s: False
[19/May/2020 23:31:11] celery.app.trace:249[24]: ERROR Task readthedocs.projects.tasks.update_docs_task[b6c22791-f1c6-4ddb-b64a-68d141580c30] raised unexpected: ValueError('signal only works in main thread',)
Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/celery/app/trace.py", line 375, in trace_task
R = retval = fun(*args, **kwargs)
File "/readthedocs.org/readthedocs/projects/tasks.py", line 448, in update_docs_task
signal.signal(signal.SIGTERM, sigterm_received)
File "/usr/local/lib/python3.6/signal.py", line 47, in signal
handler = _signal.signal(_enum_to_int(signalnum), _enum_to_int(handler))
ValueError: signal only works in main thread

我正在使用manage.py runserver来运行readthedocs,所以我尝试了--noreload选项,它不起作用,以及--nothreading选项,它会导致页面永远挂起。

为了使本地安装正常工作,您需要运行一个芹菜工人,这是我以前没有做的(并且不在 readthedocs 文档中(。我正在使用 docker compose,并运行了一个名为celery的单独服务,该服务使用与主 readthedocs 服务相同的映像(安装 django 和 readthedocs 的自定义 docker 映像(。

celery -A readthedocs.worker worker -E -l info -Q celery,web

此外,我的 Django 配置中有这些设置:

BROKER_URL = os.getenv('REDIS_URL')
CELERY_RESULT_BACKEND = os.getenv('REDIS_URL')
CELERY_ALWAYS_EAGER = False

我的撰写配置中有一个简单的 redis 服务:

redis:
image: redis

然后,我将REDIS_URL=redis://redis:6379/0作为环境变量在我的阅读文档和芹菜服务中。

有点无关,但我也停止使用python manage.py runserver并将其替换为 uwsgi 进行生产。

uwsgi 
--http :80 
--wsgi-file readthedocs/wsgi.py 
--static-map /static=./static 
--master --processes 4 --threads 2

相关内容

  • 没有找到相关文章

最新更新