当前位置: 首页 > 面试题库 >

Heroku:带有RQ的Python中的后台任务

胡霖
2023-03-14
问题内容

我正在尝试使用Heroku为我的Django应用设置后台任务。

我正在按照Heroku文档中说明的步骤进行操作。但是,我一开始就已经陷入困境。

我已经成功安装了RQ:

pip install rq

我创建了worker.py文件,其中包含与文档中完全相同的代码。

但是,当我尝试运行时:

python worker.py

我收到以下错误:

Traceback (most recent call last):
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 439, in connect
    sock = self._connect()
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 494, in _connect
    raise err
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 482, in _connect
    sock.connect(socket_address)
ConnectionRefusedError: [Errno 61] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/client.py", line 572, in execute_command
    connection.send_command(*args)
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 563, in send_command
    self.send_packed_command(self.pack_command(*args))
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 538, in send_packed_command
    self.connect()
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 442, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 61 connecting to localhost:6379. Connection refused.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 439, in connect
    sock = self._connect()
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 494, in _connect
    raise err
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 482, in _connect
    sock.connect(socket_address)
ConnectionRefusedError: [Errno 61] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "worker.py", line 15, in <module>
    worker.work()
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/rq/worker.py", line 433, in work
    self.register_birth()
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/rq/worker.py", line 250, in register_birth
    if self.connection.exists(self.key) and \
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/client.py", line 855, in exists
    return self.execute_command('EXISTS', name)
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/client.py", line 578, in execute_command
    connection.send_command(*args)
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 563, in send_command
    self.send_packed_command(self.pack_command(*args))
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 538, in send_packed_command
    self.connect()
  File "/Users/MyUser/my_app/lib/python3.5/site-packages/redis/connection.py", line 442, in connect
    raise ConnectionError(self._error_message(e))
redis.exceptions.ConnectionError: Error 61 connecting to localhost:6379. Connection refused.

经过研究,我意识到REDISTOGO_URL没有配置。我现在已经安装了redistogo,并且在运行时heroku config可以找到它。不幸的是,这似乎并不是我做错的唯一事情,因为我仍然遇到相同的错误。

我也尝试过localhost按此处127.0.0.1建议的那样更改by,但没有帮助。

在我发现的所有其他相关问题中,本地服务器上不会发生此问题。

我缺少什么步骤?


问题答案:

您将Heroku上的生产应用程序与本地开发环境相混淆。RedisToGo是在Heroku上配置的,但是当您在开发计算机上运行RedisToGo时,环境变量不存在,因此它会尝试查找在本地运行的Redis实例。

您可以在开发机器上安装Redis,也可以在本地配置REDISTOGO_URL环境变量。



 类似资料:
  • 问题内容: 我有一个程序,可以通过我在PyQt中编写的gui与正在使用的无线电接口。显然,无线电的主要功能之一是传输数据,但要连续进行,我必须循环写入,这会导致gui挂起。由于我从未处理过线程,因此我尝试使用.“无线电”需要在两次传输之间睡眠的方法来消除这些挂起,因此gui仍根据这些睡眠持续的时间来挂起。 是否有使用QThread修复此问题的简单方法?我一直在寻找有关如何使用PyQt实现多线程的教

  • RQ (Redis Queue) 是一个简单的 Python 库用于将作业放到队列中并在后台统一执行,使用 Redis 做后端,可方便的跟 Web 前端集成。 示例代码: import requestsdef count_words_at_url(url): resp = requests.get(url) return len(resp.text.split()) Then, cre

  • 我正在使用第三方rest api来查询数据并在我的应用程序中显示它。我得在晚上12点左右执行任务。它将执行一个后台任务,从rest api查询数据,并更新live tile和生成通知。我想只使用C#来完成这个任务。我不知道做这个任务最好的方法是什么。但是我使用下面的代码来执行后台任务,这是不起作用的。不知道为什么? 从后台任务中,我正在查询数据并生成toast通知。 任何有关此代码无法工作的原因或

  • 说明 在后台任务中,因为是运行在task进程,所以无法使用协程和协程客户端。如果你要操作数据库或Redis,一定要配置同步的连接池。 配置 项目配置文件中mainServer.configs.task_worker_num一定要配置为大于0,否则无法使用后台任务。 定义任务执行类 <?php namespace Test; use Imi\Task\TaskParam; use Imi\Task

  • 问题内容: 我有一个Python脚本,有时会向用户显示图像。图像有时可能很大,并且经常重复使用。显示它们不是关键,但显示与它们关联的消息是至关重要的。我有一个功能,可以下载所需的图像并将其保存在本地。现在,它与向用户显示消息的代码内联运行,但是对于非本地图像,有时可能会花费10秒钟以上。有没有一种方法可以在需要时调用此函数,但是在代码继续执行的同时在后台运行?我只会使用默认图像,直到正确的图像可用

  • 我正在尝试在Heroku上部署我的Quarkus-app。它工作正常,但我需要使用固定值指定数据源参数。因为Heroku可能会旋转此参数,所以这不是一个真正的好主意。 在Quarkus中,我需要应用程序中的这3个参数。属性: Heroku只给了我1个环境变量(