2015-04-06 82 views
0

我的烧瓶应用程序在本地完美运行,但是当我将它部署到Heroku时,它无法连接到Redis队列。Flask Heroku应用程序无法连接到Redis队列

这是例外,我得到:

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增加,并且我还检查了 - 我可以import redis运行后heroku run python

什么必须去错在这里?我必须手动启动Redis服务器吗?

编辑:看起来应用程序试图在本地连接到redis,但我再次使用shell来了解应用程序是否在env变量中设置了redistogo url,结果证明它的确如此。所以现在我必须弄清楚为什么使用本地URL的应用程序。我在这里给出了相同的代码:

编辑2:所以我试着直接在我的工人代码中对redistogo url进行硬编码,而且我仍然看到这个错误。所以工人代码可能不是问题。我无法确定是什么。 https://devcenter.heroku.com/articles/python-rq#create-a-worker

编辑3:看起来像我的问题是很多像这家伙的:

How to setup an RQ worker on Heroku with RedisCloud using Flask

编辑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:[email protected]: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:[email protected]','9630')) 
. 
. 
    job = q.enqueue_call(func=mailers.send_message, kwargs=request.json, result_ttl=86400) # Store result for 1 day 
+0

回溯表明,(工人)代码正在尝试连接本地Redis的实例,而不是一个在的环境变量 - 请加怀疑的代码(即它打开连接)这个问题。 – 2015-04-06 16:01:04

+0

增加了其他细节和链接回购。谢谢 – GrowinMan 2015-04-06 16:47:55

回答

2

看起来你需要将主烧瓶代码更改为:

q = Queue(connection=conn) 

或者,如果你必须打开一个新的连接,喜欢的东西(用getenv的替换):

q = Queue(connection=redis.Redis('redis://redistogo:[email protected]','9630')) 
+0

是的。刚才发现了一阵子。我也有另一个问题:http://stackoverflow.com/questions/29483223/should-two-modules-use-the-same-redis-connection-im-working-with-flask – GrowinMan 2015-04-07 07:26:17

相关问题