python - 在 Heroku 上使用 Flask 应用程序运行 RQScheduler

标签 python heroku flask redis redistogo

我正在尝试运行 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>))

和带有

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

现在它可以工作了。我需要做的就是弄清楚如何将环境变量添加到 Procfile 中。

关于python - 在 Heroku 上使用 Flask 应用程序运行 RQScheduler,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58667206/

相关文章:

python - 在多处理中使用多线程有意义吗?

python - 替换 pandas.DataFrame 中丢失的数据不起作用

node.js - Node 亚马逊s3 putObject上传无法上传多个文件(只上传一个)但说它有效

java - Play Framework 2 : Create images in public/images

python - 在 Python 中显式设置虚拟变量

python - sqlalchemy .contains() 仅匹配第一个元素

ruby - 将回形针与 Padrino 一起使用

python - 将 Jinja 的 groupby 过滤器与元组一起使用

python - flask url_for() 将参数视为查询字符串

Python Flask + nginx fcgi - 输出大响应?