Redis на Heroku не отвечает

Я новичок в задаче очереди Redis. Я попытался выполнить какую-то функцию в очереди с помощью надстройки Redis To Go. Но после того, как я помещаю какую-то задачу в очередь, кажется, что она исчезает.

Вот мой код

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

Дополнительная информация об очереди: все еще указывается идентификатор задания, например, 7344337b-cca0-442a-b43a-abcdc88f012c.

но никаких следов "Checkpoint1" в логе героку вообще нет.

2 ответа

Решение

Спасибо @v25. Настоящая причина того, что Redis не отвечает, потому что у меня нет WORKER. После этого см. Руководство Heroku по запуску рабочего, теперь моя проблема решена.

Я не уверен в реализации ведения журнала 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 route, чтобы убедиться, что он соответствующим образом увеличился.

Другие вопросы по тегам