ActionCable、Nginx、Redis的配置

首先

最近我正在SPA中开发名为“Fetch”的匹配应用程序。说到匹配应用程序就是聊天。因此,我添加了聊天功能。

因为贸然涉足SPA,所以在正式环境中使用WebSocket,Redis变得必不可少。

我为了部署ActionCable而写了一篇备忘录。

假设了统一

Ruby 2.5.1
Puma
Nginx
Vue
Amazon Linux AMI release 2018.03
Ruby 2.5.1、Puma、Nginx、Vue、Amazon Linux AMI发布2018.03

解释

    • Redisのインストール、実行

 

    • Rails側の設定

Production.rb
cable.yml

Nginxの設定

/etc/nginx/conf.d/*.conf

安装和运行Redis。

在服务器上执行命令,安装Redis。

sudo yum install redis --enablerepo=epel

在服务器上执行命令,并运行Redis。

sudo service redis start

Rails的配置设置

我会设定请求的来源。

  config.action_cable.allowed_request_origins = [ 'http://ドメイン', /http:\/\/ドメイン.*/]

设置WebSocket通信时的适配器

development:
  adapter: async

test:
  adapter: async

production:
  adapter: redis
  url: <%= ENV.fetch("REDIS_URL") { "redis://localhost:6379/1" } %>
  channel_prefix: example_production

由于Redis的默认端口是6379,因此在启动Redis时URL为redis://localhost:6379。如果更改了端口,这里也需要相应更改。
据说channel_prefix是为了在多个应用程序中使用Redis而需要的。如果只在一个应用程序中使用Redis,则不需要。

以下是Nginx的配置

    upstream puma-example-api {
        server unix:///home/user/htdocs/example/tmp/sockets/puma.sock;
    }

    location /cable {
        proxy_pass http://puma-example-api;
        proxy_http_version 1.1;
        proxy_set_header Upgrade websocket;
        proxy_set_header Connection Upgrade;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

请参考

通过Capistrano在Rails 5中部署Action Cable
将Rails 5中的Action Cable部署到Nginx和Puma环境中

bannerAds