Запуск RQScheduler с приложением Flask на Heroku - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь запустить RQscheduler в приложении Flask, размещенном на Heroku с RedisToGo.

Я настроил файл worker.py следующим образом

import os   
import redis
from rq import Worker, Queue, Connection

listen = ['high', 'default', 'low']

redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')

conn = redis.from_url(redis_url)

if __name__ == '__main__':
    with Connection(conn):
        worker = Worker(map(Queue, listen))
        worker.work()

Мое приложение ставит в очередь работу с

from redis import Redis
from rq_scheduler import Scheduler

@app.route('/products/create', methods=['POST'])
def product_create_sort():

   scheduler = Scheduler(connection=Redis())
   scheduler.enqueue_in(timedelta(minutes=5), sort_collection, queue_data)

   return Response(status=200)

У меня это локально работает отлично, нона Heroku Я получаю следующую ошибку

redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused. 

Я предполагаю, что проблема связана с моим Procfile. Я не знаю, действительно ли rqscheduler работает правильно или RedisToGo работает на сервере redis и RQscheduler не подключен к нему должным образом.

scheduler: rqscheduler
worker: python worker.py 
web: python app.py

1 Ответ

0 голосов
/ 02 ноября 2019

Итак, rqscheduler работал с localhost, когда redistogo на самом деле не на localhost.

Поэтому я обновил app.py с помощью

scheduler = Scheduler(connection=Redis(host=<host>, port=<port>, db=0, password=<pass>))

, а Procfile - с помощью

scheduler: rqscheduler --host <host> --port <port> --password <pass>

Теперь это работает. Все, что мне нужно сделать, это выяснить, как добавить переменные env в Procfile.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...