我想创建一个简单的聊天。 我不是服务器管理的大师。 所以我对ngnix和faye有疑问。
我使用ngnix + passenger作为我的生产服务器。我在digitalocean上有一个Droplet,并且希望在此部署我的应用程序。 因此,对于部署,我使用官方乘客教程https://www.phusionpassenger.com/library/install/nginx/install/oss/trusty/
对于模型回调,我使用faye-rails gem。像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 以及如何升级?或者我需要做什么?
答案 0 :(得分:0)
我正在使用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进行设置的一些指导。
此外,如果您按照数字海洋教程进行初始服务器设置并最终启用防火墙,请确保您允许运行Faye / websockets的端口。 (请参阅此处配置基本防火墙:Additional Recommended Steps for New Ubuntu 14.04 Servers
我的替代方法是在服务器上的单独屏幕中运行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)
运行新屏幕后,使用rackup在该屏幕中运行Faye服务器:rackup faye.ru -s thin -E production
注意,使用此选项,每次重新启动Digital Ocean服务器时(例如,如果您创建屏幕截图作为备份),您将需要创建一个新屏幕并再次运行faye服务器;然而,使用像守护进程这样的东西将是一个更好的实现来规避这个(我还没有实现它......)。前往Github并寻找FooBarWidget / daemon_controller。
如果您有任何其他问题,请告诉我,我会尽力帮忙!