web-dev-qa-db-ja.com

localhost:6379への接続エラー111。接続拒否。 Django= Heroku

私は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がローカルホストに接続しようとするのはなぜですか?

24
John Waller

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)
2
John Waller

あなたの質問に直接関係ないかもしれませんが、私は同じエラーに直面しており、私のシステムにredis-serverパッケージがインストールされていないことが判明しました。

問題が解決されました、

buntu:Sudo apt-get install redis-server

セントOS:Sudo yum install redis

48
shrishinde

解決策はSudo apt-get install redis-serverです。 Sudo service redis-server startによってサービスを開始することを忘れないでください。また、参照用にSudo service redis-server {start|stop|restart|force-reload|status}コマンドを使用できます

6
Deft-pawN

私は同じエラーに直面していました

  • 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",
        },
    }
    
  • 前 - enter image description here

  • enter image description here

3
JustChill

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でも動作します!

1
ruhanbidart

これは、redisを呼び出している/接続しているアプリケーション、接続を指定するために消費する環境変数が適切に設定されていない場合に発生する可能性があります-REDISCLOUD_URLまたはREDISTOGO_URLなど。これは、アプリまたはredisの再起動後にredisが開始され、接続IPおよび/またはアクセスを循環したことが最も簡単な場合です。そのため、デプロイ時に、ダウンストリームアプリの前にredisが開始されることを保証する

Redisが実行中であることを確認し、アプリを簡単に再起動することで問題を解決できます。または、他の回答が示しているように、適切な方法でアプリを更新し、環境変数を更新して再消費します。

0
WaveRider

私はまた、次の問題でここに着陸しました。

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

0
cinch

アプリケーションが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サーバーにインストールされていることを確認します。

0
Josh Laird