콘텐츠 스테이징.

Learn DXPR BuilderBuild pagesVolg een tutorial

콘텐츠 스테이징은 방문자에게 보이기 전에 DXPR Builder 페이지를 만들고 검토하는 일입니다. 방법은 두 가지입니다. 콘텐츠를 프로덕션으로 옮기는 별도 스테이징 사이트, 또는 한 사이트의 Drupal 리비전과 Content Moderation입니다. 이 페이지에서는 둘 다 다루며, 빌더 저장이 리비전과 조정 상태에 정확히 무슨 일을 하는지 밝힙니다. 그 내용이 맞는 방식을 정해주기 때문입니다.

빌더 저장의 동작

에디터의 모든 저장은 다음 단계를 실행합니다.

  1. 편집 중인 언어로 페이지의 default revision을 로드합니다.
  2. 현재 사용자가 페이지를 업데이트할 수 있는지 확인합니다.
  3. 새 HTML을 필드에 씁니다.
  4. 엔터티 유형에 리비전이 있으면 새 리비전을 만들고 기본 리비전으로 삼습니다. 현재 사용자가 작성자가 되며, 로그 메시지 Saved with DXPR builder와 요청 시간이 기록됩니다.
  5. 해당 페이지와 리비전의 편집 잠금을 제거한 뒤 페이지를 저장합니다.

저장 뒤의 요청은 API endpoints 아래에 설명되어 있습니다.

따라서 노드나 Drag and Drop Block의 모든 저장은 콘텐츠 유형의 Create new revision 체크 여부와 관계없이 새 리비전을 만들며, Revisions 탭에는 빌더 로그 메시지와 함께 각 저장이 나열됩니다. Drush dxb:page:update도 리비전을 만들며, 로그 메시지는 다음과 같습니다. Updated via dxb:page:update Drush command.

빌더에는 조정 상태 컨트롤이 없으며 moderation_state를 절대 설정하지 않습니다. 콘텐츠 유형에 Content Moderation이 활성화되면 새 리비전은 빌더가 로드한 리비전의 상태를 유지하고, Content Moderation은 저장 시 해당 상태 규칙을 적용합니다.

  • 게시된 페이지는 게시된 채로 있으며 새 리비전은 즉시 공개됩니다.
  • Draft의 미게시 페이지는 Draft에 머뭅니다.
  • 게시된 기본 리비전과 최신 보류 초안이 있는 페이지는 문제입니다. 빌더는 초안이 아니라 게시된 리비전을 로드하므로 저장은 게시된 콘텐츠에서 새 게시 리비전을 만들고 초안 변경은 제쳐둡니다.

상태 변경은 노드 편집 양식을 씁니다. 한 사이트 안에서 검토 과정을 거치려면 에디터가 빌더에서 작업하는 동안 페이지를 미게시(Draft)로 두고, 검토가 끝나면 양식을 통해 게시합니다.

스테이징 사이트 워크플로

별도 스테이징 사이트는 위 조정 제한을 피하고 이해관계자가 실제 페이지를 검토하게 합니다.

  1. 에디터는 스테이징 사이트에서 페이지를 만들고 변경합니다.
  2. 검토자가 그곳에서 승인합니다.
  3. 아래 방법 중 하나로 승인된 콘텐츠를 프로덕션으로 옮깁니다.
  4. 익명 방문자로 프로덕션 페이지를 확인합니다.

데이터베이스 복사

스테이징에서 프로덕션으로 데이터베이스 전체를 복사합니다.

drush sql:sync @staging @production

프로덕션 콘텐츠가 전부 대체되므로 먼저 프로덕션을 백업하고 복사 이후 프로덕션 변경은 사라진다고 예상합니다. 파일은 포함되지 않습니다. 아래 설명대로 동기화합니다.

선택적 콘텐츠 내보내기

개별 페이지를 옮기려면 Default Content 같은 모듈로 노드를 내보내고, 페이지가 참조하는 미디어와 파일을 포함하여 프로덕션에서 가져옵니다. 빌더는 HTML을 텍스트 필드에 저장하므로 필드 값이 노드와 함께 이동합니다. HTML의 이미지 경로는 sites/default/files/dxpr_builder_images를 가리키므로 해당 파일도 복사합니다.

구성 전용 배포

만든 것이 특정 페이지가 아니라 재사용 가능한 레이아웃이면:

  1. 스테이징에서 컨테이너 표시줄의 More > Save as template으로 레이아웃을 저장합니다. 사용자 템플릿이 만들어집니다.

  2. 다음으로 이동하고 해당 템플릿의 작업에서 선택합니다. DXPR Studio > DXPR Builder > User Templates로 이동하고 해당 템플릿의 작업에서 Create page template을 선택합니다.

  3. 구성을 내보냅니다.

    drush config:export
    
  4. 다음 파일을 배포하고 프로덕션에서 가져옵니다. dxpr_builder.page_template.*.yml 파일을 배포하고 프로덕션에서 가져옵니다.

    drush config:import
    
  5. 에디터는 프로덕션에서 템플릿으로 새 페이지를 시작합니다. 페이지 템플릿은 빈 컨테이너에 나타납니다.

파일 동기화

빌더의 업로드는 사이트 기본 파일 디렉터리의 dxpr_builder_images, dxpr_builder_videos, dxpr_builder_files에 들어갑니다. 콘텐츠와 함께 동기화합니다.

rsync -avz staging:/path/to/files/ production:/path/to/files/

S3 같은 공유 파일 저장소를 두 환경에 마운트하면 이 단계가 필요 없습니다.

리비전과 롤백

모든 저장이 리비전이므로 롤백은 Drupal 작업입니다.

  1. 페이지의 Revisions 탭을 엽니다.
  2. 원치 않는 저장 이전의 리비전을 찾습니다. 빌더 저장마다 Saved with DXPR builder가 표시됩니다.
  3. 버튼 Revert를 클릭합니다.

되돌리면 또 다른 리비전이 생기므로 기록이 그대로 유지됩니다.

편집 잠금

편집자가 처음 컨테이너를 클릭하면 에디터가 dxpr_toggle_content_lock 요청을 /dxpr_builder/ajax에 보내고 dxpr_lock 테이블에 엔터티, 리비전, 언어, 사용자를 기록합니다. 다른 편집자가 페이지를 열면 에디터가 dxpr_content_lock_status를 조회하고 컨테이너 컨트롤을 숨긴 뒤 잠금 보유자 이름과 함께 Locked 버튼을 표시합니다. 저장하면 행이 삭제됩니다. 다른 편집자는 Locked를 클릭하고 확인하여 잠금을 재정의할 수도 있습니다. 이후에는 마지막 저장이 우선합니다.

다음 단계