I am able to run redis locally and everything works.
However when I deploy to heroku I get this error:
Error 111 connecting to localhost:6379. Connection refused.
I have set up a Procfile with...
web: gunicorn odb.wsgi --log-file -
worker: python worker.py
I have a worker.py file...
import os
import urlparse
from redis import Redis
from rq import Worker, Queue, Connection
listen = ['high', 'default', 'low']
redis_url = os.getenv('REDISTOGO_URL')
if not redis_url:
raise RuntimeError('Set up Redis To Go first.')
urlparse.uses_netloc.append('redis')
url = urlparse.urlparse(redis_url)
conn = Redis(host=url.hostname, port=url.port, db=0, password=url.password)
if __name__ == '__main__':
with Connection(conn):
worker = Worker(map(Queue, listen))
worker.work()
A REDISTOGO_URL variable appears in the heroku config.
Redis to go is an installed add-on for my app.
Does REDISTOGO_URL have to be defined in settings.py? Why is heroku trying to connect to the local host when it is not even defined in worker.py?
The solution is
sudo apt-get install redis-server
. Don't forget to start your service bysudo service redis-server start
and you can use the commandsudo service redis-server {start|stop|restart|force-reload|status}
for referenceThis could happen when whatever application that is calling/connecting to redis, the environment variable it consumed in order to specify a connection hasn't been properly set -
REDISCLOUD_URL
orREDISTOGO_URL
etc. This could most easily be that redis was started after the app or redis restarted and cycled its connection IP and/or access. So, upon deploying, insure redis is started prior to the downstream app(s)Insure redis is up and running and a simple reboot on the app could fix the issue OR, as other answers have indicated, refresh the app in the appropriate manner to re-fresh & re-consume the environment variable.
I was facing same the error
Maybe radis server was not installed in your environment
sudo apt-get install redis-server
I needed to set up things like this in settings.py
Before
After
Turns out I needed to set up things like this for it to work on Heroku.
I also landed here with the following problem.
I realized the problem was the ufw which was denying the connections. Therefore, I allowed connections at this port using the following command.
sudo ufw alloww 6379
If you are using django_rq, a configuration like this will work for you:
It will make that work on your local environment and also on Heroku!