Faye-rails, ngnix, пассажирский медленный ответ от Фэй
Я хочу создать простой чат. Я не гуру администрирования сервера. Так что у меня есть вопрос по поводу ngnix и faye.
Я использую ngnix + passenger для моего производственного сервера. У меня есть дроплет на digitalocean и я хочу развернуть на нем свое приложение. Поэтому для развертывания я использую официальное учебное пособие для пассажиров https://www.phusionpassenger.com/library/install/nginx/install/oss/trusty/
Для обратных вызовов моделей я использую гем faye-rails. Как говорят фэй-рельсы, если я использую пассажира, мне нужно использовать эту конфигурацию
config.middleware.use FayeRails::Middleware, mount: '/faye', :timeout => 25, server: 'passenger', engine: {type: Faye::Redis, host: 'localhost'} do
map '/announce/**' => SomeController
end
В моем развитии localhost:3000 чат работает отлично быстро. Но когда я его развернул, он работает очень медленно (ответ приходит с интервалом от 5 до 60 секунд). Я не знаю, как это исправить.
В моем /etc/ngnix/sites-enabled/myapp.conf я использую этот конфиг:
server {
listen 80;
server_name server_ip;
# Tell Nginx and Passenger where your app's 'public' directory is
root /project_path_to_public;
# Turn on Passenger
passenger_enabled on;
passenger_ruby /ruby_wrapper_path;
}
Нужно ли мне обновить мой /etc/ngnix/sites-enabled/myapp.conf и как? Или что мне нужно сделать?
1 ответ
В настоящее время я использую Faye и Redis для разрабатываемого приложения. Это не прямое решение текущей установки вопроса, а альтернативный метод, который я реализовал. Ниже приведена моя конфигурация nginx, а затем я запускаю Faye через Rackup на экране сервера.
/etc/nginx/sites-enabled/application.conf:
server {
listen 80;
listen [::]:80;
server_name beta.application.org;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/application/current/public;
# Turn on Passeger
passenger_enabled on;
passenger_ruby /usr/local/rvm/gems/ruby-2.2.1/wrappers/ruby;
rails_env production;
location ~* ^/assets/ {
# Per RFC2616 - 1 year maximum expiry
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
expires 1y;
add_header Cache-Control public;
add_header Last-Modified "";
add_header ETag "";
break;
}
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
upstream websocket {
server 127.0.0.1:9292;
}
server {
listen 8020;
location / {
proxy_pass http://127.0.0.1:9292/push;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
}
Эта ссылка должна немного рассказать о том, как она работает. https://chrislea.com/2013/02/23/proxying-websockets-with-nginx/
Вы также можете обратиться к Faye github за некоторыми инструкциями по настройке с помощью Passenger.
Кроме того, если вы следовали учебным пособиям Digital Ocean для начальной настройки сервера и в конечном итоге включили брандмауэр, убедитесь, что вы разрешаете порты, на которых запущены Faye/websockets. (См. Здесь при настройке основного брандмауэра: Дополнительные рекомендуемые шаги для новых серверов Ubuntu 14.04
Мой альтернативный метод заключается в запуске Faye на отдельном экране на сервере. Вот несколько команд, которые вам понадобятся для управления экранами на сервере Ubuntu:
screen -S <pick screen name> (new screen)
screen -ls (lists screens)
screen -r <screen number> (attach screen)
to quit from a screen, ctrl + a THEN "d" (detach screen)
После запуска нового экрана запустите сервер Faye на этом экране, используя rackup: rackup faye.ru -s thin -E production
Как примечание, с этой опцией каждый раз, когда вы перезагружаете свой сервер Digital Ocean (т.е. если вы создаете снимок экрана в качестве резервной копии), вам нужно будет создать новый экран и снова запустить сервер faye; однако, использование чего-то вроде Daemon было бы лучшей реализацией, чтобы обойти это (я просто еще не реализовал это...). Зайдите на Github и найдите FooBarWidget/daemon_controller.
Дайте мне знать, если у вас есть другие вопросы, и я постараюсь помочь!