gpt4 book ai didi

ruby-on-rails - Faye-rails、nginx、faye 的乘客响应缓慢

转载 作者:行者123 更新时间:2023-12-03 17:41:38 26 4
gpt4 key购买 nike

我想创建一个简单的聊天。
我不是服务器管理专家。
所以我有一个关于 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 如何?或者我需要做什么?

最佳答案

我目前正在开发的应用程序上使用 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 的端口。 (请参阅此处配置基本防火墙: 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 服务器;然而,使用像 Daemon 这样的东西会是一个更好的实现来规避这个(我只是还没有实现它......)。前往 Github 并查找 FooBarWidget/daemon_controller。

如果您有任何其他问题,请告诉我,我会尽力提供帮助!

关于ruby-on-rails - Faye-rails、nginx、faye 的乘客响应缓慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34810587/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com