Конфигурация 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 действительно впечатляет.
может быть, некоторые из моих проблем были тривиальными, но я делюсь ими и как я их решил, чтобы каждый мог выбрать что-то, если это необходимо