카테고리 순서를 저장하려고 할 때 502 오류 발생

안녕하세요! 카테고리 수가 매우 많습니다(약 2000개). 이제 카테고리 1개의 순서를 변경해야 하는데요. 표준 “카테고리 순서 변경” 기능은 1분 후에 502 오류로 실패합니다. 이 문제를 어떻게 해결할 수 있을까요? 감사합니다!

해결하셨나요? 여전히 타임아웃 오류가 발생하고 있다면, 사이트의 Rails 콘솔을 통해 해당 카테고리의 position을 설정해야 할 수도 있습니다. 다만 2000개나 되는 카테고리에서 이렇게 하는 것은 다소 복잡할 수 있습니다.

아니요, 아직 해결책을 찾지 못했습니다.

어떻게 하면 되나요? Rails 콘솔에 대해서는 전혀 알지 못합니다.

이 문제에 대해 조금 더 조사해 보았습니다. 2000개의 카테고리가 있다면 꽤 복잡한 작업이 될 것입니다. 한 카테고리의 위치를 변경하면 그 뒤에 있는 모든 카테고리의 위치에도 영향을 미치기 때문입니다. 콘솔을 통해 변경하도록 권고하는 것은 꺼려집니다.

기술적으로는 이것이 버그인지 확실하지 않습니다. Discourse는 2000개 이상의 카테고리를 생성할 수 있도록 허용하지만, UI는 그렇게 많은 카테고리를 처리하도록 설계되지 않았습니다. 과거에 카테고리를 순서대로 정렬할 때 문제가 없었나요?

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개의 좋아요