尝试保存类别顺序时出现 502 错误

你好!我有大量分类(约2000个)。现在需要调整其中一个分类的顺序。但标准的“重新排序分类”功能在运行1分钟后会返回502错误。请问该如何解决?谢谢!

你解决这个问题了吗?如果你仍然遇到超时错误,可能需要从站点的 Rails 控制台中直接设置该分类的 position。不过,对于 2000 个分类来说,这样做似乎会相当复杂。

不,还没找到解决方案。

我该怎么做?我对 Rails 控制台一无所知。

我进一步研究了这个问题。面对 2000 个分类,这将是一项相当复杂的操作——更改一个分类的位置会影响其后方所有分类的位置。我不太建议通过控制台来执行此更改。

从技术角度看,我不确定这是否属于漏洞。Discourse 确实允许创建 2000 多个分类,但其用户界面并非为处理如此大量的分类而设计。您过去是否曾成功地对分类进行过重新排序且未遇到问题?

2 个赞

你想要它们按字母顺序排列吗?我曾经写过一个脚本,用来按字母顺序对分类和子分类进行排序。

我想已经有人劝你改用标签了吧?这很可能只是你在使用如此多的分类时会遇到的第一个问题。

2 个赞

不,这是我第一次遇到这个问题,之前从未出现过。我是通过普通界面中的脚本创建这么多分类的。如何通过控制台操作?

我使用标签是为了另一个目的,不能与其他物质混用。现在我需要将一个子类别上移。我在创建之前已经手动排序过。唯一的方法是使用控制台。有什么办法吗?

你可以这样做:

cd /var/discourse
./launcher enter app
rails c

即可进入控制台。然后执行 do stuff 操作。

如果你不理解这些内容,那么你可能不应该自己尝试。

以下是我认为是 2018 年 1 月 12 日左右可用的脚本。我不保证它们一定有效,但也没看出为什么不行。请务必备份数据,并点一支蜡烛祈福。:wink:

# 按字母顺序排序所有匹配搜索条件的分类及其子分类

  def sort_matching_categories_and_subcategories(search)
    categories = Category.where("name like ?", search)
    position = 100
    categories.order(:name).each do |cat|
      position += 5
      cat.position = position
      cat.save!()
      c_position = 0
      children = Category.where(:parent_category_id=>cat.id)
      children.order(:name).each do |c|
        c_position += 5
        c.position = c_position
        c.save!()
      end
    end
  end


 # 按字母顺序排序单个匹配搜索条件的分类下的子分类
def sort_matching_subcategories(search)
  categories = Category.where("name like ?", search)
  if categories.count > 1
    puts "Found more than one category"
  end
  categories.order(:name).each do |cat|
    c_position = 5
    children = Category.where(:parent_category_id=>cat.id)
    children.order(:name).each do |c|
      c_position += 5
      c.position = c_position
      c.save!()
    end
  end
end

如果你需要更多帮助并且有预算,请访问 Redirecting… 或发送邮件给我。

希望这能帮到你!

2 个赞