ActionCable + Nginx + Puma и java.io.EOFException - PullRequest
0 голосов
/ 12 февраля 2019

Я пытаюсь подключиться к веб-сокету ActionCable, и все работает нормально, работая локально только с Puma и без nginx.

Однако, когда я пытаюсь сделать то же самое в моей промежуточной среде, соединениенемедленно закрывается после подключения.Я могу получить нисходящие приветственные сообщения и, возможно, пинг.

Однако соединение внезапно закрывается без каких-либо обратных вызовов onClose, поэтому я предполагаю, что nginx не позволяет соединению сохраняться.

Вот конфигурация nginx моих сайтов.

upstream app {
  # Path to Puma SOCK file, as defined previously
  server unix:/home/deploy/my-app/shared/tmp/sockets/puma.sock fail_timeout=60;
  keepalive 60;
}

server {
        listen 80;
        server_name localhost;
#       websocket_pass websocket;

        root /home/deploy/my-app/current/public;

        try_files $uri/index.html $uri @app;

        location @app {
          proxy_pass http://app;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_set_header Host $http_host;
          proxy_redirect off;
        }

        #location / {
        #        proxy_set_header X-Forwarded-Proto $scheme;
        #        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #        proxy_set_header X-Real-IP $remote_addr;
        #        proxy_set_header Host $host;
        #        proxy_redirect off;
        #        proxy_http_version 1.1;
        #        proxy_set_header Connection '';
        #        proxy_pass http://app;
        #}

        location ~ ^/(assets|fonts|system)/|favicon.ico|robots.txt {
          gzip_static on;
          expires max;
          add_header Cache-Control public;
        }

        location /cable {
          proxy_pass http://app;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "Upgrade";
        }

        error_page 500 502 503 504 /500.html;
        client_max_body_size 4G;
        keepalive_timeout 10;
}

Я также обнаружил эту ошибку в журналах ошибок nginx:

2019/02/11 21:08:35 [ошибка] 10233 # 10233: * 2 recv () не удалось (104: сброс соединения по одноранговому узлу) при проксировании обновленного соединения, клиент: xxxx, сервер: localhost, запрос: «GET / cable / HTTP / 1.1», upstream: «http://unix:/home/deploy/wr-api/shared/tmp/sockets/puma.sock:/cable/", хост: "xxxx"

1 Ответ

0 голосов
/ 15 февраля 2019

Итак, через некоторое время мы заметили, что в файле промежуточной среды cable.yml для URL указано следующее значение:

url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>

Удаление этого значения и всех других значений, кроме adapter: staging, исправило его для нас.

Новый конфигурационный файл cable.yml:

staging:
  adapter: redis

Работает!

...