답변:
땅에 오신 것을 환영합니다 F는 eatures C를 onfiguration M의 일명 관 리 FCM ! 이는 Drupal 버전 8에 도입 된 Configuration Management 가 아니라 Features 기능 에 관한 것이 아닙니다 . 대신의 특별한 경우이다 S oftware C onfiguration M 관 리 , 일명 SCM은 . 대부분 기능 은 코드 생성기로 간주 될 수 있지만 생성 된 코드는 여러 환경을 통해 마이그레이션해야합니다. 자세한 내용은 계속 읽으십시오.
기능 을 사용하면 기능 의 내용을 패키지화 (구성)하는 방법을 상상할 수 있습니다. 여기에 사용할 수있는 기술이 있습니다.
이것은 매우 간단한 패키징 기술입니다. 모든 것이 단일 기능으로 함께 패키징됩니다 (일부는 "신"기능이라고합니다). 쉽고, 매우 앞선 것처럼 보입니다. 그러나이 기술은 또한 "아래에 설명 된대로" "충돌"을 야기합니다.
"Drupal distribution"을 작성할 때이를위한 좋은 유스 케이스 인 것으로 보입니다. "Drupal distribution"은 모든 사용자가 동일한 모듈, 구성 등을 사용하는 것으로 가정합니다. 그러나 그러한 배포가 여러 웹 사이트 기능으로 구성되어있는 경우 "기능"...), 이러한 기능을 아래 설명 된대로 여러 기능으로 분할하는 것이 더 적절 해 보입니다.
이 패키징 기술은 다음과 같이 웹 사이트의 각 기능에 대해 별도의 기능을 만듭니다.
이 패키징 기술은 다음과 같이 사이트를 만드는 데 사용되는 Drupal 웹 사이트의 각 주요 관리 섹션에 대해 별도의 기능을 만듭니다.
위의 목록은 사실상 무제한입니다. 결국 당신이 그것을 원한다면 각 Drupal 관리자 메뉴 옵션에 대해 하나의 기능으로 생각할 수도 있습니다.
IMO는 패키지 기능에 가장 권장되는 방법이기도합니다.
여러 컨텐츠 유형 중 필드를 재사용하면 약간의 충돌이 발생하는 것 같습니다. 예를 들어 컨텐츠 유형 A에는 machine name을 가진 필드가 있으며 field_somefield
, 이는 머신 이름이 동일한 컨텐츠 유형 B의 필드로 사용 field_somefield
되지만 다른 필드 유형 및 / 또는 다른 다른 필드 설정으로도 사용됩니다.
콘텐츠 유형간에 필드를 재사용하지 않으면이 문제가 발생하지 않습니다. 랩핑 정보 아키텍처 및 문서 표에 나와있는 " Drupal의 상대성 모델 "에 대한 기사의 일부인 컨텐츠 유형 및 필드의 머신 이름에 대한 흥미로운 이름 지정 규칙을 살펴보십시오 . 이에 대한 자세한 내용은 " 데이터베이스 중심의 관점에서 컨텐츠 (유형)를 어떻게 모델링합니까? "에 대한 나의 대답을 참조하십시오 .
여러 사람이 단일 사이트에서 작업하는 경우 누가 무엇을 작업하는지에 따라 기능을 구성하여 (= 별도 만들기) 충돌의 양을 줄일 수 있습니다. 이 예는 다음 예와 같습니다.
위의 모든 것은 기능 사용을 용이하게하는 데 도움이됩니다 . 그러나 작업이 예상대로 (디자인 된) 작동하게하려면 기본적으로 다음과 같은 이유로 적절한 환경 세트 (논리적으로 관련된 Drupal 웹 사이트)가 있어야합니다.
이상적인 세계에서 논리적으로 관련된 Drupal 웹 사이트는 다음과 같이 구성하고 사용해야합니다.
분명히 Drupal 사이트 유형의 위 인벤토리는 이상적인 세계와 같습니다. 개발 팀의 규모 및 / 또는 예산을 만들고 유지 관리하는 데 사용할 수있는 예산에 따라 모든 예산을 사용할 수있는 것은 아닙니다. 이 인벤토리는 SCM 영역에서 모범 사례를 모델로하며 대부분의 모든 거대 / 글로벌 기업 (은행, 항공사 등)에서 사용됩니다.
스트롱 모듈은 모듈 기능 (변수의 설정을 저장하는 모듈) 변수를 내보낼 수있다.
노드 수출 모듈 수출 노드에 사용자를 허용하고 다른 드루팔 설치로 가져옵니다.
역할 내보내기 모듈 역할 machine_names를 가질 수 있으며 여기서 machine_name의 기반으로 고유 한 역할 ID (RID)를 생성한다. 기능을 사용 하여 역할을 내보내고 다른 사이트에서 가져 오면 완전히 제거 할 수 있습니다.
는 추방의 기능 모듈은 완전히가 UI와 기능 수출을 갖추고에서 개별 기능 컴포넌트를 제외 수 있습니다. 다음은 프로젝트 페이지에서 인용 한 것입니다.
이 모듈은 내보내기를 원하지 않는 기능 구성 요소가있는 경우에 유용합니다. 사이트 구축 또는 배포 기능을 사용하는 경우 누군가 cron_last 또는 update_last_check와 같은 타임 스탬프 변수를 실수로 내보내는 문제가 발생했을 수 있습니다. 내보내려는 나머지 사이트 권한에 걸리지 않도록 개발자 모듈에 대한 권한을 제거 할 수도 있습니다. 삭제 된 항목은 기능 모듈이나 다른 기능 모듈에 표시되지 않으므로주의해서 사용하십시오. 내보낼 수없는 기능의 중앙 목록은 https://www.drupal.org/node/2400531을 참조 하십시오.
콩 모듈은 블록을 내보낼 수 있습니다. 다음은 프로젝트 페이지에서 인용 한 것입니다.
Bean을 새로운 유형 (노드와 비교할 때 내용 유형 임)을 제공하는 방법으로 생각하면 필요한만큼 많은 블록을 생성하기 위해 컨텐츠 추가 인터페이스를 제공합니다 (아래 스크린 샷 참조). 그런 다음 다른 블록처럼 빈 컨텐츠를 사이트 주변에 배치 할 수 있습니다.
이 모듈은 UUID 및 UUID 기능 통합 모듈 과 함께 사용할 수도 있습니다 . 이 모듈은 D7부터 시작되었지만 Drupal 8 코어에 이미 포함되어 있습니다. 비디오 자습서 Drupal Bean 모듈 학습서-Bean Admin UI 사용 은이 모듈의 기능과 사용자가 코딩 할 수있는 사이트 빌드 기술 만 사용하여이 모듈의 기능을 실제로 이해하기위한 훌륭한 소개를 제공합니다.
서식지 A가에 모듈이 가장 적합한 특징 기반의 워크 플로우를. 다음은 프로젝트 페이지에서 인용 한 것입니다.
다중 환경 설정 (예 : prod, test, dev, local)에는 특정 환경에서 항상 활성화 또는 비활성화하려는 일부 모듈이 있습니다. 데이터베이스를 동기화 할 때마다 동일한 모듈을 다시 활성화 / 비활성화해야합니다. 더 나쁜 것은 생산에 게으른 개발 모듈을 유지하는 것입니다.
서식지는 각 환경 (해비타트)에서 특정 모듈을 활성화 또는 비활성화하는 설정을 제공합니다. 예를 들어 $ conf [ 'habitat'] = 'local'; settings.php 파일에서 (현재 사용하는 실제 변수는 현재 워크 플로우에 대해 구성 가능합니다). 비활성화 / 활성화 모듈은 hook_init에서 수행됩니다.
Features 을 사용할 수 없거나 아직 (의용 할 수 없다면), 아래의 접근 방식 / 모듈이 어떤 유형의 대안을 제공하는지 확인할 수 있습니다.
이것들은 규칙 , 보기 등과 같은 모듈 (불완전한 목록!) 과 같은 모듈에 대해 관리자 UI를 통해 사용 가능한 일반적으로 알려진 기능 (단어 기능 을 피하기 위해 ... )입니다.
어떤 사람들은 번들 복사 모듈을 가능한 대안으로 생각합니다 . 다음에 대한 내보내기 / 가져 오기 지원이 있습니다.
여러 개발자가 구성을 기능에 통합 할 때 병합 충돌이 발생할 수 있습니다. 기능 코드를 검토하기위한 몇 가지 지침을 작성했지만 가장 중요한 것은 다음과 같습니다.
이것은 무엇을 의미 하는가? 이는 각 개발자 가 커밋하기 전에 코드를 검토 해야 함을 의미합니다 . 개발자가주의하지 않고 의도하지 않은 코드 변경을 방지하는 "마법"은 없습니다.
git diff
.git diff > blah.patch
만들고 의도 한 구성 변경 사항 만 포함하도록 패치를 수동으로 수정하십시오.
10dd
vim은 패치의 변경 사항을 제거합니다 (예 : 패치).featurename.features.field_base.inc
합니다.git commit -a
. 이것은 끔찍한 관행으로 사용을 방해해야합니다. 항상 명시 적으로 추가하고 커밋하십시오!git rebase
에 대한 지역 자식 가지 기능이 최신인지 확인합니다.git merge -s recursive -X patience
(git 1.7+ iirc 필요).마지막으로 패치 검토 또는 풀 요청으로 트렁크 / 안정화에 병합하기 전에 개발자가 코드를 검토하도록 개발자에게 사회적 제한을 추가하는 것을 고려하십시오. 사람들은 사회적 제한에 대해 화를 내지 만 코드를 검토하지 않은 것에 대해 스스로 화를 내야합니다.
git add -p
특정 청크 만 커밋하는 것이 좋습니다.