2016-06-16 5 views
0

Я пытаюсь ввести чат в мое приложение Rails. Для этого я использовал gem private_pub и отлично работает в режиме разработки.Сбой подключения к Интернету с nginx и faye

В производстве я использовал Apache + Passenger, но я не смог настроить Faye, поэтому я изменил Apache на Nginx. Мое главное приложение все еще находится на сервере Apache, и это демо на Nginx с портом 8080 (только для теста).

Я могу подключиться к faye.js путем ввода http://chat.mysite.com:8080/faye.js, но соединение с приложением вызывает ошибку (консоль браузера).

WebSocket подключение к 'WS: // локальный: 9292/Фей' не удалось: Ошибка в установлении соединения: сетка :: ERR_CONNECTION_REFUSED

После этой ошибки, другая ошибка появляется каждые 5 секунд.

faye.js: 2 GET http://localhost:9292/faye?message=%5B%7B%22channel%22%3A%22%2Fmeta%2Fhands ... 22% 2C% 22callback-опроса% 22% 5D% 2C% 22id% 22% 3A% 221% 22% 7D% 5D & JSONP = jsonp2 нетто :: ERR_CONNECTION_REFUSED

Мой private_pub.yml

production: 
    server: "http://localhost:9292/faye" 
    secret_token: "mysecret" 
    signature_expiration: 3600 # one hour 

Мой private_pub.ru

require "bundler/setup" 
require "yaml" 
require "faye" 
require "private_pub" 

Faye::WebSocket.load_adapter('thin') 
PrivatePub.load_config(File.expand_path("../config/private_pub.yml", __FILE__), ENV["RAILS_ENV"] || "development") 
run PrivatePub.faye_app 

Мой Nginx site.conf

server { 
    listen 8080; 
    server_name www.chat.mysite.com; 
    passenger_enabled on; 
    passenger_app_env production; 

    root /var/www/mysite/public; 

    location ^~ /faye { 
    proxy_pass http://127.0.0.1:9292; 
    proxy_http_version 1.1; 
    proxy_set_header Host $host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header Upgrade $http_upgrade; 
    proxy_set_header Connection "Upgrade"; 
    proxy_buffering off; 
    proxy_redirect off; 
    proxy_connect_timeout  90; 
    proxy_send_timeout   90; 
    proxy_read_timeout   90; 
    #proxy_set_header X-Forwarded-Proto https; 
    proxy_cache_bypass $http_pragma $http_authorization; 
    proxy_no_cache  $http_pragma $http_authorization; 
    break; 
    } 
} 

Если изменить private_pub.yml к http://localhost:9292/faye/faye, я увидел ошибку, как "не может загрузить /faye/faye.js ресурсов".

Как мне изменить свой конфиг Nginx или приложение yml для разрешения ошибки websocket?

+0

в private_pub.yml попробуйте изменить сервер в "HTTP: // локальный: 8080/Фей" – niceman

+0

@niceman получите ошибку приложение-63199a9 ... .js: 14 GET HTTP: // локальный: 8080/Faye .js net :: ERR_CONNECTION_REFUSED – MaruniakS

+1

hmmm, возможно, вы должны поместить имя сервера вместо localhost в private_pub.yml, добавив, что localhost заставит клиента вызвать себя вместо вашего сервера, я думаю – niceman

ответ

1

Я попытался настроить свой private_pub.yml, как сказал @niceman. Теперь все работает хорошо.

production: 
    server: "http://my-ip:8080/faye" 
1

Я вижу private_pub очень похож на ActionCable в своем дизайне. Прежде чем зайти слишком далеко по дороге, вы можете захотеть прочитать мой пост в блоге «ActionAcable - The good and bad parts», поскольку он подходит к подходящим случаям использования, когда такая система, как private_pub, хороша, а когда нет.

Если вы, конечно, уже знаете о недостатках, тогда удачи!