가져 오기 / 내보내기에서 구성 제외


16

나는 이것이 새로운 구성 관리 시스템의 간단한 유스 케이스라고 생각했지만 이것을 해결하는 방법을 찾지 못했습니다.

문제

구성을 git에 저장하고 개발 중 drush를 사용하여 구성을 내보내고 배포시 구성을 가져오고 싶습니다. Drupal 7의 기능 복귀와 매우 유사합니다. 제 문제는 다양한 통합을 위해 액세스 코드를 git에 저장하고 싶지 않다는 것입니다. 결과적으로 이러한 구성이 삭제됩니다.
$ drush cim -y

내가 본 곳

가져 오기 / 내보내기에서 제외해야 할 구성에 대한 간단한 목록 / 구성이 있기를 바랐습니다. 어느 시점에 있었던 것 같지만 현재 Drupal 8 릴리스에서 사용할 수 있으므로 다시 제거해야합니다.

변경 사항을 제거 할 수있는 장소가 있는지 확인하기 위해 활성 및 동기화 범위를 비교하여 구성 변경을 수행하는 방법을 살펴 보았습니다. 자체 구성을 제외하고 일부 구성을 제외하고 구성 가져 오기가 drush를 수행하는 방법을 살펴 보았지만 확장 가능한 것처럼 보이지 않았습니다. 나는을 보았지만 ConfigEvents이것들은 모두 가져온 후에 발생하는 것처럼 보이므로 이것이 사용될 수있는 것처럼 보이지는 않습니다.

내가 빠진 것이거나 가져 오기 / 내보내기에서 구성을 제외시키는 것이 불가능합니까?

답변:


7

구체적으로 제외를 할 수는 없지만 무언가가 있습니다.

Drupal 7의 $ conf와 마찬가지로 settings.php에 $ config가있어서 설정에서 로컬로 무엇이든 덮어 쓸 수 있습니다. 형식은 $config['name.of.config']['nested']['key']입니다.

구성에 저장된 내용은 여전히 ​​git에 있으므로 아무것도 또는 테스트 액세스 코드를 git에 유지해야합니다. 또한 UI는 실제로 구성에 저장된 내용을 표시하며 현재 재정의되었음을 표시하지 않습니다. 이를 개선하기 위해 보류중인 문제가 있습니다.

여기에는 제한이 있지만 현재 내 보낸 구성에서 무언가를 유지할 수는 없습니다. 내가 아는 한.


따라서 기본적으로 인터페이스를 사용하는 대신 settings.php 파일에서 구성을 설정 / 업데이트해야합니다.
googletorp

예, 이것은 새로운 것이 아닙니다. d8의이 컨텍스트에서 워크 플로우에서 변경된 것은 없습니다.

11

"Config Ignore"구성 모듈을 사용할 수 있습니다 : https://www.drupal.org/project/config_ignore

drush cim을 수행 할 때 파일 시스템의 구성으로 인해 사이트 구성이 재정의 된 적이 있습니까?

더 이상은 아닙니다!

이 모듈은 원하는 구성을 그대로 유지할 수있는 도구입니다.


2
config_ignore는 아마도 현재 사용 가능한 가장 안정적이고 간단한 솔루션 일 것입니다.이 솔루션은 아마도 "가져 오기 / 내보내기에서 제외해야 할 구성에 대한 간단한 목록 / 구성"을 갖기를 원하는 OP의 요구를 가장 잘 해결합니다.
bdanin

7

이를 위해 config_ignoreconfig_split 의 조합을 사용할 수 있습니다 .

구성 무시를 사용하면 가져 오는 동안 구성 엔티티의 서브 세트를 무시할 수 있습니다 (2.x 릴리스 이후의 삭제도 방지). 불행히도 내보내기 중에 구성을 제외하는 것을 막을 수는 없습니다.

내보내는 동안 구성 엔터티를 제외하려면 config_split을 사용하고 새 config_split 엔터티를 만든 다음 폴더를 비워 둘 수 있습니다. 이렇게하면 구성이 파일 시스템으로 내보내지지 않습니다. 대신 데이터베이스로 내 보냅니다.

이 주제에 대해 Drupal 8의 구성 관리에서 구성 제외를 작성했습니다 .


5

구성을 분할하려면 https://www.drupal.org/project/config_split 을 사용할 수 있습니다 .

필터링 된 구성을 가져오고 내보내는 Drupal 콘솔 명령을 제공하는 config_split을 입력하십시오. Drush 통합은 곧 이어질 것입니다 (모든 필터가 drush의 --skip-modules 필터에서 영감을 얻은 후).

내보내기를 다른 디렉토리로 분할하여 무시할 수 있습니다.

CMI 이니셔티브를 담당하는 사람들이 drupal con dublin 2016에서 멋진 프레젠테이션을 했는데 어떤 일이 있어도 확인해 보라고 권합니다.


2

방금 # 1 답변에서 @berdir을 테스트했으며 완벽하게 실행됩니다. 약간의 메모 만 추가하십시오.이 var에 전체 구성을 완료해야합니다. 그것을 제외하고 $ config var가 올바르게 실행되지 않습니다.

이 같은:

 $config['language.negotiation'] = array(
  'session' => array(
    'parameter' => 'language',
  ),
  'url' => array(
    'source' => 'domain',
    'prefixes' => array(
      'es' => '',
      'pt-br' => '',
    ),
    'domains' => array(
      'es' => 'YourLocalDomain',
      'pt-br' => 'Anotherlocaldomain',
    ),
  ),
  'selected_langcode' => 'site_default',
  'langcode' => 'es',
);

설명서 : https://www.drupal.org/node/1928898

위의 문서에서 참고 : "설정 .php에서 $ config를 통해 재정의 된 값은 Drupal 관리 인터페이스에서 볼 수 없습니다."


3
이 작업을 수행하지 않아도됩니다. 정의한 값으로 병합해야하지만 일부 구조에서는 예상대로 작동하지 않을 수 있습니다.
Berdir

아, 제대로 실행할 수 없었습니다. 다시 디버깅을 시도하고 제대로 실행되지 않으면 d.org에서 버그를 열 수 있습니다. 감사!
estoyausente

1
난 당신이 같은 것을 할 수 있다는 것을 확인할 수 있습니다$config['module.settings']['some']['value'] = 'foo';
googletorp

2

지금까지 왜 아무도 Drush CMI 도구 를 언급하지 않았는지 궁금 합니다. 마법의 단어는 drush cexyconfig-ignore.yml. 조정할 수있는 목록이 있습니다. 블록베이스가 처리되는 동시에 블록 인스턴스가 제외되도록하는 것이 한 번 필요했습니다.

모든 구성을 내보내고 싶지만 특정 패턴을 제외하고 싶습니다.

여기에 --ignore-list옵션이 drush cexy들어갑니다.

프로젝트에는 ./drush 폴더가 있으므로 config-ignore.yml 이라는 파일에 다음과 같이 내용을 붙여 넣 습니다.

ignore:
  - field.field.contact_message.*
  - field.storage.contact_message.*
  - contact.form.*
  - core.entity_form_display.contact_message*
  - core.entity_form_display.contact_form*
  - core.entity_view_display.contact_message*
  - core.entity_view_display.contact_form*
  - system.site
  - workbench_email.workbench_email_template.*

이제 우리 drush cexy는 이렇게 실행

drush cexy --destination=/path/to/config-export --ignore-list=/path/to/drush/config-ignore.yml

이 작업은 활성 구성을 내 보낸 다음 무시 목록을 적용하여 원하지 않는 구성을 제거합니다.

이제 실행 git status하면 커밋하려는 변경 사항 만 표시됩니다.

출처 : https://www.previousnext.com.au/blog/introducing-drush-cmi-tools

설치

cd ~/.drush
wget https://raw.githubusercontent.com/previousnext/drush_cmi_tools/8.x-1.x/drush_cmi_tools.drush.inc
drush cc drush

출처 : https://github.com/previousnext/drush_cmi_tools


1

구성 분할 사용 (권장)

설정 분할 모듈은 이러한 요구를 위해 특별히 만들어졌다.

구성 분할은 drush와 통합됩니다.

Drush 만 사용

Drush 또한 --skip-modules플래그 를 사용하여 그렇게 할 수 있어야합니다 .

프로젝트의 웹 루트에있는 drupal / drushrc.php에 다음 라인을 추가하여 자동으로 수행 할 수 있습니다.

$command_specific['config-export']['skip-modules'] = array('devel');
$command_specific['config-import']['skip-modules'] = array('devel');

http://www.drush.org/en/master/config-exporting/#ignoring-development-modules를 참조 하십시오

슬프게도이 기능에 버그 가 있습니다 : https://github.com/drush-ops/drush/issues/1820 . 따라서 현재 .gitignore에 해당 구성 파일을 추가해야 내 보낸 구성 파일이 커밋되지 않습니다. 그것들은 구성 분할을 선호하여 서두 에서이 (버기) 기능을 포기하기 위해 진행 중입니다.


2
git에서 구성 파일을 무시하면 정확하게 작동하지 않습니다. 내 보내지 않은 구성은 삭제됩니다. 예를 들어, 구성을 가져 오면 사용자 정의 패널 페이지가 삭제됩니다.
dobrzyns

[ 'config-import'] [ 'skip-modules']와 함께 drush를 사용하여 가져 오더라도 @ user157272?
gagarine

drushrc.php는 웹 루트 외부에 배치 할 수도 있습니다. 예를 들어 한 단계 높은 레벨은 작곡가 설정에서 Drupal에 대해 작업 할 때 유용합니다 ( github.com/drupal-composer/drupal-project) .
leymannx

이것은 나를 위해 작동하지 않았습니다. 모듈을 추가했지만 여전히 모듈 활성화 / 비활성화 구성에 추가되었습니다.
제레미 존

나는 현재의 모범 사례 (설정 분할)로 대답 업데이트
gagarine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.