@hotwired/turbo-rails / 导致浏览器崩溃的无限循环

问题描述 投票:0回答:1

尝试涡轮铁路;给出这个超级简单的配置:

# posts/index.html.erb
<%= turbo_stream_from("posts") %>
<%= turbo_frame_tag "posts" do %>
  <%= render posts %>
<% end %>

# posts/_post.html.erb
<%= turbo_stream_from(post) %>
<%= turbo_frame_tag dom_id(post) do %>
  <%= post.label %>
<% end %>

# app/models/post.rb
class Post < ApplicationRecord
  broadcasts
end

我们希望在添加新帖子时刷新列表。
更新给定帖子时,我们希望它在列表中刷新。

一开始一切都很顺利,我们得到了我们想要的。然后,导航,返回页面,事情开始变得非常难看;后端无限循环以下内容:

 [ActionCable] [5e298b47-2a81-4770-9afb-07be06991d62] Ignoring message processed after the WebSocket was closed: "{\"command\":\"subscribe\",\"identifier\":\"{\\\"channel\\\":\\\"Turbo::StreamsChannel\\\",\\\"signed_stream_name\\\":\\\"IloybGtPaTh2WkcxNEwwVjBiRG82VkhKaGJuTm1aWEl2TXpnMVlqRmxOMkl0TVdWaE1pMDBZakppTFRnMk5qUXRZbVUwT1RWbVl6bGhOVGxpIg==--69b574f5584e2cfcfbf1d59d692f4cea40ce0d730d7794e3dac523cd609006a3\\\"}\"}")

在某个时刻,浏览器崩溃了。

我们的配置中可能有一些明显需要修复的问题;至少寻求帮助来找出该怎么做

ruby-on-rails actioncable
1个回答
0
投票

我仍在我自己的应用程序中验证修复,但我怀疑这是因为每次替换/重新渲染部分时您都订阅了

post
涡轮流。对于您来说,使用模型
after_commit
钩子等可能更有意义。

我已将等效的订阅行移至主文件(在您的情况下为索引),此后一直无法重现该问题。正如我所说,我仍然想做更多测试来验证。

我的设置与您的设置有点不同,因为我没有使用集合进行渲染。这是我的代码:

# index.html.erb
<%= turbo_stream_from "items_#{@item.id}" %>
<%= turbo_stream_from "progress_for_#{@item.id}" %>
<%= turbo_frame_tag "prefix_#{dom_id(@item)}" do %>
    <%= render partial: "prequalification_shared/progress_bar", locals: {progress: @progress, item: @item} %>
    <% end %>
    ...
  </div>
<% end %>

# _progress_bar.html.erb
<%# commented this out #= turbo_stream_from "progress_for_#{item.id}" %>
<%= turbo_frame_tag dom_id(item, :progress), class: "prequal-progress-bar-container" do %>
  <div>
    <div style="width: <%= progress %>%"></div>
  </div>
<% end %>
© www.soinside.com 2019 - 2024. All rights reserved.