我正在尝试运行 RQscheduler在 Heroku 上使用 RedisToGo 托管的 Flask 应用程序上。
我设置了一个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-server 并且 RQscheduler 未正确连接到它。
scheduler: rqscheduler
worker: python worker.py
web: python app.py
最佳答案
因此,当 redistogo 实际上不在本地主机上时,rqscheduler 正在与本地主机一起工作。
所以我更新了 app.py
scheduler = Scheduler(connection=Redis(host=<host>, port=<port>, db=0, password=<pass>))
和带有
的 Procfilescheduler: rqscheduler --host <host> --port <port> --password <pass>
现在它可以工作了。我需要做的就是弄清楚如何将环境变量添加到 Procfile 中。
关于python - 在 Heroku 上使用 Flask 应用程序运行 RQScheduler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58667206/