Ошибка socket () (24: слишком много открытых файлов) при подключении к восходящему операционному кабелю Ruby на Rails - PullRequest
0 голосов
/ 30 марта 2020

Мы работаем над проектом чата с использованием RubyOnRails. Приложение, которое мы разработали, работает на местном без каких-либо проблем. Однако выдает ошибку при попытке подключить веб-сокет извне. Мы требуем использовать эти приложения чата apis из Android приложения.

Мы используем следующие технологии / фреймворки

  • Rails 5.0.0
  • Ruby 2.2.2
  • Экшн-кабель
  • Пассажир
  • Nginx
  • Redis

/ etc / nginx / sites-enabled / chatroom_demo

server {
  listen 80 default_server;
  server_name xx.xxx.xxx.xxx;
  passenger_enabled on;
  passenger_app_env production;
  root /home/projects/chatroom_demo/public;

  location /cable {
       passenger_app_group_name chatroom_demo_action_cable;
       passenger_force_max_concurrent_requests_per_process 0;

       proxy_pass http://xx.xxx.xxx.xxx;
       proxy_http_version 1.1;
       proxy_set_header Upgrade $http_upgrade;
       proxy_set_header Connection "upgrade";
    }
}

/ etc / nginx / nginx .conf

user www-data;
worker_processes auto;
worker_rlimit_nofile 16384;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 20000;
    # multi_accept on;
}

config / cable.yml

production:
  adapter: redis
  url: redis://localhost:6379

config / сред /production.rb

config.action_cable.url = [/ws:\/\/*/, /wss:\/\/*/]
config.action_cable.allowed_request_origins = [/http:\/\/*/, /https:\/\/*/]

На стороне клиента, к которому мы подключаемся, используя следующий код:

let socket = new WebSocket("ws://XX.XXX.XXX.XXX/cable");

socket.onopen = function(e) {
  alert("[open] Connection established");  
};

socket.onerror = function(error) {
  alert(`[error] ${error.message}`);
};

Ошибка на стороне клиента: Undefined Ошибка на стороне сервера:

* Ошибка сокета 32764 () (24: слишком много открытых файлов) при подключении к восходящему потоку, клиент: XX.XXX.XXX.XXX, сервер: XX.XXX.XXX.XXX, запрос: «GET / кабель HTTP /1.1 ", восходящий поток:" http://XX.XXX.XXX.XXX: 80 / кабель", хост:" XX.XXX.XXX.XXX "

Мы пробовали много разных способов исправить эта проблема, но не может найти никакого потенциального решения.

1 Ответ

0 голосов
/ 30 марта 2020

Вы также обновили настройки sysd nolimitfile, чтобы они стали чем-то> worker_rlimit_nofile 16384? Подробнее в этом решении .

...