ActionCable即使使用redis也返回0或nil。
创始人
2024-07-23 19:30:21
0

可以使用Rails的配置选项config.action_cable.allowed_request_origins来限制可以访问ActionCable服务器的域(例如:config.action_cable.allowed_request_origins = '*://example.com')。这个选项将控制请求的来源,以确保只有特定的请求才能访问ActionCable服务器。

另外,在Redis配置文件中(redis.conf)可以添加一些选项来优化Redis服务,例如禁用RDB持久化,这样就可以减少Redis服务器的负载。

以下是一个使用ActionCable和Redis的示例:

首先,确保Redis服务器正在运行并已正确配置。

然后,运行bundle以获取必要的gem:

# Gemfile
gem 'redis'
gem 'activerecord'
gem 'bcrypt'
gem 'rack-cors'
gem 'puma'
gem 'listen'
gem 'spring'

接下来,创建一个ActionCable通道:

# app/channels/chat_channel.rb
class ChatChannel < ApplicationCable::Channel
  def subscribed
    # stream_from "some_channel"
  end

  def unsubscribed
    # Any cleanup needed when channel is unsubscribed
  end

  def speak(data)
    ActionCable.server.broadcast 'chat_channel', message: data['message']
  end
end

最后,更新config/application.rb,启用WebSocket支持:

# config/application.rb
config.web_socket_server_url = "ws://localhost:3000/cable"
config.action_cable.allowed_request_origins = ['http://localhost:3000', 'http://127.0.0.1:3000']

启动Rails服务器,在模板中添加ActionCable客户端:

// app/views/layouts/application.html.erb
<%= action_cable_meta_tag %>

...

<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload', 'data-turbolinks-eval': 'false' %>

...