簡體   English   中英

Flask Heroku應用程序無法連接到Redis Queue

[英]Flask Heroku app can't connect to Redis Queue

我的flask應用程序在本地運行良好,但是當我將其部署到Heroku時,它無法連接到Redis Queue。

這是我得到的例外:

2015-04-06T09:01:45.586197+00:00 app[web.1]: Traceback (most recent call last):
2015-04-06T09:01:45.586189+00:00 app[web.1]: [2015-04-06 09:01:45 +0000] [9] [ERROR] Error handling request
2015-04-06T09:01:45.586201+00:00 app[web.1]:     self.handle_request(listener, req, client, addr)
2015-04-06T09:01:45.586199+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 130, in handle
2015-04-06T09:01:45.586204+00:00 app[web.1]:     respiter = self.wsgi(environ, resp.start_response)
2015-04-06T09:01:45.586202+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/gunicorn/workers/sync.py", line 171, in handle_request
2015-04-06T09:01:45.586206+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1836, in __call__
2015-04-06T09:01:45.586207+00:00 app[web.1]:     return self.wsgi_app(environ, start_response)
2015-04-06T09:01:45.586209+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1820, in wsgi_app
2015-04-06T09:01:45.586210+00:00 app[web.1]:     response = self.make_response(self.handle_exception(e))
2015-04-06T09:01:45.586212+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1403, in handle_exception
2015-04-06T09:01:45.586214+00:00 app[web.1]:     reraise(exc_type, exc_value, tb)
2015-04-06T09:01:45.586215+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1817, in wsgi_app
2015-04-06T09:01:45.586237+00:00 app[web.1]:     response = self.full_dispatch_request()
2015-04-06T09:01:45.586239+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1477, in full_dispatch_request
2015-04-06T09:01:45.586240+00:00 app[web.1]:     rv = self.handle_user_exception(e)
2015-04-06T09:01:45.586242+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1381, in handle_user_exception
2015-04-06T09:01:45.586243+00:00 app[web.1]:     reraise(exc_type, exc_value, tb)
2015-04-06T09:01:45.586244+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1475, in full_dispatch_request
2015-04-06T09:01:45.586246+00:00 app[web.1]:     rv = self.dispatch_request()
2015-04-06T09:01:45.586247+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/flask/app.py", line 1461, in dispatch_request
2015-04-06T09:01:45.586248+00:00 app[web.1]:     return self.view_functions[rule.endpoint](**req.view_args)
2015-04-06T09:01:45.586250+00:00 app[web.1]:   File "/app/mailr.py", line 80, in send_message
2015-04-06T09:01:45.586252+00:00 app[web.1]:     job = q.enqueue_call(func=mailers.send_message, kwargs=request.json, result_ttl=86400)  # Store result for 1 day
2015-04-06T09:01:45.586253+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/rq/queue.py", line 212, in enqueue_call
2015-04-06T09:01:45.586254+00:00 app[web.1]:     return self.enqueue_job(job, at_front=at_front)
2015-04-06T09:01:45.586256+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/rq/queue.py", line 259, in enqueue_job
2015-04-06T09:01:45.586259+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/redis/client.py", line 1477, in sadd
2015-04-06T09:01:45.586257+00:00 app[web.1]:     self.connection.sadd(self.redis_queues_keys, self.key)
2015-04-06T09:01:45.586260+00:00 app[web.1]:     return self.execute_command('SADD', name, *values)
2015-04-06T09:01:45.586261+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/redis/client.py", line 570, in execute_command
2015-04-06T09:01:45.586263+00:00 app[web.1]:     connection.send_command(*args)
2015-04-06T09:01:45.586264+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/redis/connection.py", line 556, in send_command
2015-04-06T09:01:45.586265+00:00 app[web.1]:     self.send_packed_command(self.pack_command(*args))
2015-04-06T09:01:45.586267+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/redis/connection.py", line 532, in send_packed_command
2015-04-06T09:01:45.586268+00:00 app[web.1]:     self.connect()
2015-04-06T09:01:45.586270+00:00 app[web.1]:   File "/app/.heroku/python/lib/python2.7/site-packages/redis/connection.py", line 436, in connect
2015-04-06T09:01:45.586271+00:00 app[web.1]:     raise ConnectionError(self._error_message(e))
2015-04-06T09:01:45.586273+00:00 app[web.1]: ConnectionError: Error 111 connecting to localhost:6379. Connection refused.

我已經安裝了RedisToGo附加組件,並且還檢查了-運行heroku run python后可以import redis

這里一定出了什么問題? 我必須手動啟動redis服務器嗎?

編輯:因此,看起來該應用程序正試圖在本地連接到Redis,但我再次使用Shell來查找該應用程序是否在env變量中具有redistogo url設置,事實證明確實如此。 所以現在我必須弄清楚為什么該應用程序使用本地URL。 我正在使用此處給出的相同代碼:

編輯2:所以我嘗試直接在工作代碼中對redistogo url進行硬編碼,但仍然看到此錯誤。 因此,工作程序代碼可能不是問題。 我不知道是什么。 https://devcenter.heroku.com/articles/python-rq#create-a-worker

編輯3:看來我的問題很像這個人的問題:

如何使用Flask使用RedisCloud在Heroku上設置RQ工作者

編輯4:

這是我的代碼庫: https : //bitbucket.org/elbee19/mailr/src

這就是我現在使用工作程序的方式:

import os

import redis
from rq import Worker, Queue, Connection

listen = ['default']

#redis_url = os.getenv('REDISTOGO_URL', 'redis://localhost:6379')
redis_url = 'redis://redistogo:58cxxxxxxb7de6653c4a7915a97115@cobia.redistogo.com:9630'
conn = redis.from_url(redis_url)

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

這是主燒瓶文件中的代碼。 這是引發錯誤的代碼:

q = Queue(connection=Redis('redis://redistogo:58c9xxx351fb7de6653c4a7915a97115@cobia.redistogo.com','9630'))
.
.
    job = q.enqueue_call(func=mailers.send_message, kwargs=request.json, result_ttl=86400)  # Store result for 1 day

看起來您需要將主燒瓶代碼更改為:

q = Queue(connection=conn)

或者,如果您必須打開一個新連接,則類似於(用getenv代替):

q = Queue(connection=redis.Redis('redis://redistogo:58c9xxx351fb7de6653c4a7915a97115@cobia.redistogo.com','9630'))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM