Конфигурация NGINX для рельсов 5 ActionCable с puma

Я использую Jelastic для своей среды разработки (еще не в производстве). Мое приложение работает с Unicorn, но я обнаружил websockets с ActionCable и интегрировал его в свое приложение.

все работает нормально в локальной среде, но при развертывании в моей среде Jelastic (с конфигурацией NGINX/Unicorn по умолчанию) я получаю это сообщение в своей консоли javascript, и я ничего не вижу в своем журнале доступа

WebSocket connection to 'ws://dev.myapp.com:8080/' failed: WebSocket is closed before the connection is established.

у меня было на моем местном окружающая среда, и я решил это, добавив необходимые ActionCable.сервер.конфиг.allowed_request_origins в моем файле конфигурации. Поэтому я дважды проверил свою конфигурацию разработки для этого, и все в порядке.

вот почему мне было интересно, есть ли что-то конкретное для конфигурации NGINX, кроме того, что объясняется на странице ActionCable git

bundle exec puma -p 28080 cable/config.ru

для моего приложения я следил за всем из Введите описание ссылки здесь но ничего не упоминается о NGINX конфигурация

Я знаю, что websocket с ActionCable довольно новый, но я надеюсь, что кто-то сможет дать мне наводку на это

большое спасибо

1 ответов


Ok, поэтому мне, наконец, удалось исправить мою проблему. Вот различные шаги, которые позволили сделать эту работу:

1.nginx : я действительно не знаю, нужно ли это, но поскольку мое приложение работает с Unicorn, я добавил Это в свой nginx conf

upstream websocket {
  server 127.0.0.1:28080;
}

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

а затем в :

config.action_cable.url = "ws://my.app.com/cable/"

2.Разрешенный источник запроса: я заметил, что мое соединение было отклонено, даже если я использовал ActionCable.server.config.allowed_request_origins в своем . Мне интересно, если это не из-за дефолта разработки as http://localhost:3000 как указано в документации. Поэтому я добавил следующее:

ActionCable.server.config.disable_request_forgery_protection = true

у меня еще нет производственной среды, поэтому я еще не могу проверить, как это будет.

3.Пароль Redis: как указано в документации, я использовал config/redis/cable.yml но у меня была эта ошибка:

Error raised inside the event loop: Replies out of sync: #<RuntimeError: ERR operation not permitted>
/var/www/webroot/ROOT/public/shared/bundle/ruby/2.2.0/gems/em-hiredis-0.3.0/lib/em-hiredis/base_client.rb:130:in `block in connect'

поэтому я понял, что способ установки пароля для моего сервера redis не был хорошим.

In то нужно сделать что-то вроде этого:

development:
  <<: *local
  :url: redis://user:password@my.redis.com:6379
  :host: my.redis.com
  :port: 6379

и теперь все работает нормально, и Actioncable действительно впечатляет.

может быть, некоторые из моих проблем были тривиальными, но я делюсь ими и как я их решил, чтобы каждый мог выбрать что-то, если это необходимо