0

在 heroku 上部署我的网站后,我收到以下错误。

Error 111 connecting to 127.0.0.1:6379. Connection refused.
Request Method: POST
Request URL:    https://website.herokuapp.com/account/register
Django Version: 3.2.8
Exception Type: OperationalError
Exception Value:    
Error 111 connecting to 127.0.0.1:6379. Connection refused.
Exception Location: /app/.heroku/python/lib/python3.8/site-packages/kombu/connection.py, line 451, in _reraise_as_library_errors
Python Executable:  /app/.heroku/python/bin/python
Python Version: 3.8.12
Python Path:    
['/app',
 '/app/.heroku/python/bin',
 '/app',
 '/app/.heroku/python/lib/python38.zip',
 '/app/.heroku/python/lib/python3.8',
 '/app/.heroku/python/lib/python3.8/lib-dynload',
 '/app/.heroku/python/lib/python3.8/site-packages']
Server time:    Sat, 11 Dec 2021 21:17:12 +0530

所以基本上我的网站必须在注册后发送有关 otp 的电子邮件以及一些与合同相关的电子邮件。这些电子邮件是必须发送的,因此无法避免。我之前在这里发布了一个关于如何最小化发送电子邮件所花费的时间的问题,以便用户不必一直等待。有人建议我为此使用异步代码。所以我决定用芹菜来做这个。我关注了教如何使用它的 youtube 视频。

现在,在我将代码推送到网站后,我收到了这个错误。我是初学者,不知道如何纠正它。请建议我该怎么做。以下是详细信息和配置。

设置.py


CELERY_BROKER_URL = 'redis://127.0.0.1:6379'
CELERY_RESULT_BACKEND = 'redis://127.0.0.1:6379'
CELERY_ACCEPT_CONTENT =['application/json']
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TASK_SELERLIZER = 'json'

要求.txt

amqp==5.0.6
asgiref==3.4.1
billiard==3.6.4.0
celery==5.2.1
click==8.0.3
click-didyoumean==0.3.0
click-plugins==1.1.1
click-repl==0.2.0
colorama==0.4.4
Deprecated==1.2.13
dj-database-url==0.5.0
Django==3.2.8
django-ckeditor==6.1.0
django-filter==21.1
django-js-asset==1.2.2
django-multiselectfield==0.1.12
dnspython==2.1.0

正如我所提到的,我是初学者,请就如何纠正此错误向我提出详细的建议。

4

1 回答 1

1

这是问题所在:

CELERY_BROKER_URL = 'redis://127.0.0.1:6379'

Redis 不会在您的本地测功机上运行。您必须在其他地方运行它并配置您的代码以连接到它。一个常见的选择是通过插件运行 Redis

选择代理后,创建您的 Heroku 应用程序并将附加组件附加到它。在示例中,我们将使用Heroku Redis作为 Redis 提供程序,但Heroku Elements Marketplace 中还有许多其他Redis 提供程序。

如果您选择使用 Heroku Redis,您将能够通过环境变量获取到您的实例的连接字符串REDIS_URL

Heroku 附加组件为您的应用程序提供环境变量,这些变量可以传递给您的 Celery 应用程序。例如:

import os
app.conf.update(BROKER_URL=os.environ['REDIS_URL'],
                CELERY_RESULT_BACKEND=os.environ['REDIS_URL'])

您的 Celery 应用程序现在知道将您选择的代理和结果存储用于您在其中定义的所有任务。

其他插件将提供类似的配置机制。

这里引用的所有文档和大多数链接都来自 Heroku 的Using Celery on Heroku文章。我建议您阅读整个文档以获取更多信息。

于 2021-12-11T17:13:01.853 回答