python - Heroku:使用 RQ 在 Python 中执行后台任务

标签 python django heroku redis

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

我正在按照 Heroku documentation 中说明的步骤进行操作. 然而,我一开始就卡住了。

我已经成功安装了 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 here , 但它没有帮助。

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

我缺少哪些步骤?

最佳答案

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

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

关于python - Heroku:使用 RQ 在 Python 中执行后台任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43733050/

相关文章:

python - 查找列表中的哪个元素是字典中的键以及它的值是什么

python - Flask 交互式调试器损坏

python - 在 Django 的 models.py 中创建数据库时如何修复迁移错误?

node.js - 将 Angular 应用程序部署到 Heroku 时出现 "violates the following Content Security Policy directive: "default-src 'none' ". 错误

python - Heroku 不再支持 Celery 了吗?

Eclipse:我的 SSH key 与与我的 Heroku Acct 关联的 SSH key 不匹配

android - 安卓版基维

python - 如何找到 scipy.integrate.ode 的默认 atol 和 rtol?

python - Django channel NOT NULL 约束失败 : chat_chatmessage. 消息

python - STATICFILES_DIR、STATIC_ROOT 和 MEDIA_ROOT 的区别