私はredisをローカルで実行することができ、すべてが機能します。
ただし、herokuにデプロイすると、次のエラーが表示されます。
Error 111 connecting to localhost:6379. Connection refused.
Procfileをセットアップしました...
web: gunicorn odb.wsgi --log-file -
worker: python worker.py
Worker.pyファイルがあります...
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()
REDISTOGO_URL変数がheroku構成に表示されます。
Redis to goは、アプリ用にインストールされたアドオンです。
REDISTOGO_URLはsettings.pyで定義する必要がありますか? worker.pyで定義されていなくても、herokuがローカルホストに接続しようとするのはなぜですか?
Herokuで動作させるには、このようなものをセットアップする必要がありました。
redis_url = os.getenv('REDISTOGO_URL')
urlparse.uses_netloc.append('redis')
url = urlparse.urlparse(redis_url)
conn = Redis(Host=url.hostname, port=url.port, db=0, password=url.password)
あなたの質問に直接関係ないかもしれませんが、私は同じエラーに直面しており、私のシステムにredis-serverパッケージがインストールされていないことが判明しました。
問題が解決されました、
buntu:Sudo apt-get install redis-server
セントOS:Sudo yum install redis
解決策はSudo apt-get install redis-server
です。 Sudo service redis-server start
によってサービスを開始することを忘れないでください。また、参照用にSudo service redis-server {start|stop|restart|force-reload|status}
コマンドを使用できます
私は同じエラーに直面していました
Radisサーバーが環境にインストールされていない可能性があります
Sudo apt-get install redis-server
Settings.pyでこのようなものを設定する必要がありました
redis_Host = os.environ.get('REDIS_Host', 'localhost')
# Channel layer definitions
# http://channels.readthedocs.org/en/latest/deploying.html#setting-up-a-channel-backend
CHANNEL_LAYERS = {
"default": {
# This example app uses the Redis channel layer implementation asgi_redis
"BACKEND": "asgi_redis.RedisChannelLayer",
"CONFIG": {
"hosts": [(redis_Host, 6379)],
},
"ROUTING": "multichat.routing.channel_routing",
},
}
Django_rqを使用している場合、次のような設定が有効です。
RQ_QUEUES = {
'default': {
'Host': 'localhost',
'PORT': '6379',
'URL': os.getenv('REDISTOGO_URL', 'redis://localhost:6379'), # If you're
'DB': 0,
'DEFAULT_TIMEOUT': 480,
}
}
それはあなたのローカル環境とHerokuでも動作します!
これは、redisを呼び出している/接続しているアプリケーション、接続を指定するために消費する環境変数が適切に設定されていない場合に発生する可能性があります-REDISCLOUD_URL
またはREDISTOGO_URL
など。これは、アプリまたはredisの再起動後にredisが開始され、接続IPおよび/またはアクセスを循環したことが最も簡単な場合です。そのため、デプロイ時に、ダウンストリームアプリの前にredisが開始されることを保証する
Redisが実行中であることを確認し、アプリを簡単に再起動することで問題を解決できます。または、他の回答が示しているように、適切な方法でアプリを更新し、環境変数を更新して再消費します。
私はまた、次の問題でここに着陸しました。
Trying again in 2.00 seconds...
[2019-06-10 07:25:48,432: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379//: Error 111 connecting to localhost:6379. Connection refused..
Trying again in 4.00 seconds...
[2019-06-10 07:25:52,439: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379//: Error 111 connecting to localhost:6379. Connection refused..
Trying again in 6.00 seconds...
[2019-06-10 07:25:58,447: ERROR/MainProcess] consumer: Cannot connect to redis://localhost:6379//: Error 111 connecting to localhost:6379. Connection refused..
Trying again in 8.00 seconds...
私は問題が接続を拒否していたufwであることに気付きました。したがって、次のコマンドを使用して、このポートでの接続を許可しました。
Sudo ufw alloww 6379
アプリケーションがRedisに接続できない場合、エラー111がスローされます。 Heroku Django Channels チュートリアルに続いて同じ問題が発生しました。settings.pyファイルは次のようになります。
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgi_redis.RedisChannelLayer",
"CONFIG": {
"hosts": [os.environ.get('REDISCLOUD_URL', 'redis://localhost:6379')],
},
"ROUTING": "chat.routing.channel_routing",
},
}
REDISCLOUD_URL
の代わりに REDIS_URL
。
RedisがHerokuサーバーにインストールされていることを確認します。