首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在将新代码部署到Heroku时强制ActionCable断开所有客户端

如何在将新代码部署到Heroku时强制ActionCable断开所有客户端
EN

Stack Overflow用户
提问于 2017-10-16 06:14:57
回答 1查看 944关注 0票数 2

我有一个应用程序,它存储到actioncable通道的所有连接的计数,在subscribed上递增,在unsubscribed上递减。然而,我发现了一个问题,当服务器(彪马)宕机时,部署到Heroku不会unsubscribed活动的连接。因此,当新版本的应用程序启动时,连接计数会高于其应有的数量。

我的特定频道的代码:

代码语言:javascript
运行
AI代码解释
复制
class PostChannel < ApplicationCable::Channel
  attr_reader :subscribers

  def subscribed
    channel_name = "TestChannel#{params[:post_id]}"
    stream_from channel_name
    user_ids = active_users channel_name
    user_ids << connection.current_user.id
    update_users channel_name, user_ids
  end

  def unsubscribed
    channel_name = "TestChannel#{params[:post_id]}"
    user_ids = active_users channel_name
    user_ids.delete_at(user_ids.index(connection.current_user.id) ||
                       user_ids.length)
    update_users channel_name, user_ids
  end

  def active_users(channel_name)
    JSON.parse(Redis.current.hget('actioncable', channel_name) || '[]')
  end

  def update_users(channel_name, user_ids)
    Redis.current.hset('actioncable', channel_name, user_ids.to_json)
    ActionCable.server.broadcast(
      channel_name,
      users: user_ids,
      action: 'UsersChanged'
    )
  end
end

如何强制ActionCable取消订阅部署到Heroku的所有活动连接?

EN

回答 1

Stack Overflow用户

发布于 2017-10-16 06:51:00

您可以定义一个rake任务,断开所有客户端的连接,然后使用heroku release dynos运行它(这样每次部署时它都会运行):

procfile:

代码语言:javascript
运行
AI代码解释
复制
release: bundle exec rake reset_action_cable_consumers

rake任务:

代码语言:javascript
运行
AI代码解释
复制
# reset_action_cable_consumers.rake

# This should work
ActionCable.server.remote_connections.disconnect

# Other solution
App.cable.subscriptions.each{|subscription| subscription.unsubscribe()}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46763966

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文