【问题标题】:Redis on Heroku not respondHeroku 上的 Redis 没有响应
【发布时间】:2020-03-28 13:44:26
【问题描述】:

我对 Redis 排队作业任务很陌生。我尝试使用 Redis To Go Add-on 在队列上执行一些功能。但是在我将一些任务推送到队列后,它似乎消失了。

这是我的代码

import Flask
import redis
from rq import Queue

REDIS_URL = os.getenv('REDISTOGO_URL', None)
if REDIS_URL!=None:
    r = redis.from_url(REDIS_URL)
else:
    r = redis.Redis()

q = Queue(connection=r)

def function(pam1):
    print("Checkpoint1")
    return 0

@main.route('/name', methods=['GET', 'POST'])
def displayname():
    job = q.enqueue(function, pam1=0)
    return job.id

关于队列的其他信息:仍然提供作业 ID,例如 7344337b-cca0-442a-b43a-abcdc88f012c。

但在 heroku 日志上根本没有“Checkpoint1”的迹象。

【问题讨论】:

    标签: redis redis-py heroku-redis


    【解决方案1】:

    我不确定 Heroku 的日志记录实现,但假设您正在查看错误的日志(或其他内容),您可以试试这个...

    不打印“检查点”,而是增加自定义 redis 键的值:

    def function(pam1):
        r.incr('job_ran', 1)
        return 0
    

    然后创建一个可以检查这个值的路由:

    @app.route('/show_count')
    def show_count():
        n = r.get('job_ran')
    
        if n is None:
            n = 0
        else:
            n = n.decode('utf-8')
    
        return f'Job has run {n} times'
    

    现在将一些作业排入队列,并检查 /show_count 路由以确保它已相应增加。

    【讨论】:

    • 它说“作业没有运行过”顺便说一句,我确实稍微改编了你的代码,因为它似乎会导致错误 Nontype can't use decode。所以我改用 '''n = str(r.get('job_ran'))''' 。
    • 当然!如果密钥不存在,r.get 将返回 None,这是作业成功完成之前的情况。请参阅我的编辑以说明这一点。
    • @MaitreeHirunteeyakun 但是,您是说即使使用此修复程序,作业也无法运行?其他要尝试的事情:你确定你已经启动了工作人员吗?
    • (参见launching a worker上的heroku指南)
    • 是的,我忘了做一个worker.py 感谢这么多的帮助!
    【解决方案2】:

    感谢@v25。 Redis 没有响应的真正原因是因为我没有 WORKER。收到see the Heroku guide on launching a worker 之后,我的问题就解决了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 2019-01-18
      • 1970-01-01
      • 2021-05-13
      • 2017-06-01
      • 1970-01-01
      • 2017-02-16
      相关资源
      最近更新 更多