대규모 Discourse 사이트의 재배치를 스크립트로 자동화하기 위해, 사이트 리더십 팀과 협력하여 YAML 설정 파일에서 구동되는 여러 Ruby 스크립틀릿을 패키징하는 간단한 프레임워크를 작성했습니다. 이를 통해 스테이징 사이트에서 백업을 복원하고, 스크립트를 실행한 후 피드백을 받아 YAML 몇 줄을 수정하고, 다시 백업을 복원하여 새 설정으로 스크립트를 실행하는 과정을 반복할 수 있습니다.
제 사이트에는 약 600줄에 달하는 설정이 있으며, 이를 UI를 통해 수동으로 조작하는 것은 불가능합니다. 한 번만 하더라도 벅찰 텐데, 올바르게 설정하기 위해 여러 번 반복하는 것은 더더욱 말도 안 되는 일입니다. 이전에는 대규모 변경을 제안했을 때 실제로 포기해야 했던 경험이 있기 때문에 잘 알고 있습니다. 반면, 이 스크립트를 사용하면 사이트가 약 50만 개의 게시물과 100개 이상의 카테고리를 가지고 있음에도 불구하고 반복마다 단 몇 분 만에 전체 사이클을 완료할 수 있습니다. 이를 통해 사이트 리더십 팀으로부터 빠른 피드백을 받을 수 있으며, 사이트를 빠르게 마이그레이션할 준비도 갖출 수 있습니다.
더 자세한 문서 코드가 포함된 저장소의 README 파일에 있습니다:
이 스크립트는 오류 검사를 하지 않습니다. 라이브 사이트에서 실행하는 것은 매우 위험합니다. 이 스크립트는 스테이징 사이트에서 실행하여 결과를 검증한 후 라이브 환경에 적용하도록 설계되었습니다. 저 역시 이 방식으로 실행할 계획입니다. 라이브 사이트에서 직접 실행하다가 문제가 발생하면 모든 결과를 스스로 감당해야 합니다. ![]()
문서에 따르면, 설정 파일은 다음과 같은 형태를 가질 수 있습니다:
---
- describe:
context: Old Name
category: 7
name: New Name
description: New description of category
slug: new-slug
- movePosts:
context: move only faq posts from the Support category to the Documentation category
source: 3 # Support category ID
target: 6 # Documentation category ID
withTag: faq
hide: false # do not hide the Support category when done
- movePosts:
context: consolidate How-To category into documentation with how-to tag
source: 8 # How-To category ID
target: 6 # Documentation category ID
addTag: how-to
hide: true # hide the old How-To category, visible only to Admin
실행 중 진행 상황 출력이 다음과 같이 표시될 수 있습니다.
==========
Move hidden categories out of the way so they don't clutter admin view
setHiddenCategory: {:category=>11}
==========
Rename Old Name to New Name
describe: {:category=>7, :name=>"New Name", :description=>"New description of category", :slug=>"new-slug"}
==========
move only faq posts from the Support category to the Documentation category
movePosts: {:source=>3, :withTag=>"faq", :target=>6}
==========
사용하려면 YAML 파일을 /var/discourse/shared/app/tmp/rearrange.yaml에 넣고 다음을 실행하십시오:
cd /var/discourse
./launcher enter app
git clone https://github.com/johnsonm/discourse-site-rearranger.git script/discourse-site-rearranger
ruby script/discourse-site-rearranger/rearrange.rb /shared/tmp/rearrange.yaml
그러나, 이 스크립트가 필요한 모든 작업을 완벽하게 수행하지는 않을 가능성이 있습니다. 이는 사실 스크립트 기반 사이트 수정의 더 많은 측면을 몇 줄의 코드로 자동화하는 새로운 작업을 쉽게 추가할 수 있게 해주는 프레임워크입니다. 몇 줄의 코드로 하나의 메서드를 정의하기만 하면, YAML 파일에서 이를 적절히 호출할 수 있습니다.
사이트의 조직을 개선하는 방법에 대해 고민해 보았지만 UI 사용에 주저하고 있거나, 스테이징 사이트에서 테스트한 내용을 라이브 환경에서 변경할 때 동일하게 재현할 수 있을지 신뢰할 수 있는지 고민하고 계신가요? 한 번 살펴보고 여러분의 생각을 들려주세요!