我在nginx(带有乘客)服务器上的ActionCable遇到问题。当我使用ActionCable打开页面时,服务器将阻止所有其他请求。 我发现Rails - Server Blocking on Action Cable这个问题描述了完全相同的问题,但是解决方案却无济于事。
我的nginx配置
server {
listen *:8020 ssl;
server_name my-domain.com;
root /var/www/my-domain/current/public;
passenger_enabled on;
passenger_app_env beta;
passenger_app_group_name my-domain_action_cable;
passenger_app_type rack;
passenger_startup_file cable/config.ru;
passenger_force_max_concurrent_requests_per_process 0;
ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem; $
ssl_certificate_key /etc/letsencrypt/live/my-domain.com/privkey.pem$
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
# ssl on;
listen *:443 ssl;
server_name my-domain.com;
passenger_enabled on;
passenger_app_env beta;
root /var/www/my-domain/current/public/;
ssl_certificate /etc/letsencrypt/live/my-domain.com/fullchain.pem; $
ssl_certificate_key /etc/letsencrypt/live/my-domain.com/privkey.pem$
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
/cable/config.ru:
require ::File.expand_path('../../config/environment', __FILE__)
Rails.application.eager_load!
run ActionCable.server
cable.yml:
beta:
adapter: redis
url: redis://localhost:6379/1
环境文件中的ActionCable配置:
config.action_cable.url = 'wss://my-domain.com:8020'
与ActionCable连接的js(使用actioncable-vue)
Vue.use(ActionCableVue, {
debug: true,
debugLevel: 'error',
connectionUrl: 'wss://my-domain.com:8020',
connectImmediately: false,
}) ;
myChannel.rb:
class MyChannel < ApplicationCable::Channel
def subscribed
stream_from "my_channel_#{params[:id]}"
end
def unsubscribed
end
def broadcast_data(data)
ActionCable.server.broadcast("my_channel_#{params[:id]}", data)
end
end
我的猜测是问题出在nginx配置中,但是我无法弄清楚。
我遵循了this指南,在不同的服务器和端口上运行操作电缆(我已经尝试在同一台服务器上运行它,问题仍然存在)