Rails-使用ActionCable时服务器请求被阻止

时间:2020-05-20 12:22:51

标签: ruby-on-rails nginx passenger actioncable

我在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指南,在不同的服务器和端口上运行操作电缆(我已经尝试在同一台服务器上运行它,问题仍然存在)

0 个答案:

没有答案