설치할 수 없습니다… 활성 구성에 이미 존재합니다


15

Drupal 8.1에서는 기본 페이지를 약간 수정하는 사용자 정의 모듈 또는 사용자 정의 기능을 활성화하려고 할 때 이러한 메시지가 계속 표시됩니다. (필드 추가).

정말 성가시다 ...

단계 :

  • 데이터베이스 완전 삭제
  • /install.php로 이동하여 표준 프로파일을 선택하십시오.
  • 사이트가 실행 중이므로 확장으로 이동하십시오.
  • 기능-기본 페이지 선택

결과:

Unable to install Feature - Basic Page, core.base_field_override.node.page.promote, core.entity_form_display.node.page.default, core.entity_view_display.node.page.default, core.entity_view_display.node.page.teaser, field.field.node.page.body, node.type.page already exist in active configuration.

그래 .. 내가하고 싶은 일 : 기본 설정을 바꾸어 라!

연장 :

기본 페이지를 약간 수정하는 기능을 설치할 수 있습니다.

내 기능

다음은 기능 모듈로 작성한 기능입니다.

기본적으로 banner_image와 background_image라는 두 개의 필드를 기본 페이지에 추가합니다.

파일 :

config
    install
        core.base_field_override.node.page.changed.yml
        core.base_field_override.node.page.created.yml
        core.base_field_override.node.page.promote.yml
        core.base_field_override.node.page.status.yml
        core.base_field_override.node.page.sticky.yml
        core.base_field_override.node.page.title.yml
        core.base_field_override.node.page.uid.yml
        core.entity_form_display.node.page.default.yml
        core.entity_view_display.node.page.default.yml
        core.entity_view_display.node.page.teaser.yml
        field.field.node.page.body.yml
        field.field.node.page.field_banner_image.yml
        field.field.node.page.field_image.yml
        field.storage.node.field_banner_image.yml
        language.content_settings.node.page.yml
        node.type.page.yml
feature_basic_page.features.yml
feature_basic_page.info.yml

이 간단한 것이 지원되지 않는 이유는 무엇입니까? 버그입니까? 내 기능을 사용하려면 어떻게해야합니까?


1
활성 구성을 제거하는 데 사용되는 drupal EasyInstall 모듈을 사용하십시오
Karthikeyan Manivasagam

1
+1 재미있는 모듈-살펴볼 가치가있는-감사합니다 @KarthikeyanManivasagam
therobyouknow

답변:


24

돌진으로 당신은 아마 할 수 있습니다

drush config-delete module_name.settings

불평하는 구성을 삭제하려면


또한 Drupal과의 서사시 전투 중에 optional/폴더 에서 해당 구성을 이동 하여 시스템을 종료 할 수 있음을 발견 했습니다. 하지만 ... 모든 의미의 확실하지 않다
기욤 부아

@GuillaumeBois :이 옵션 구성은 이미 설치되어 있거나 종속성이 충족되지 않으면 무시됩니다. 따라서 모듈이 작동하기 위해 구성이 필요한 경우 추가 문제가 발생할 수 있습니다.
Renrhaf

+1 감사합니다 @GiorgosK (1/2) :이 솔루션이 제 경우에는 효과가 있다는 것을 알았 Warning: in_array() expects parameter 2 to be array, null given in lightning_layout_block_alter() (line 91 of modules/contrib/lightning_layout/lightning_layout.module).습니다 : 내 개발자 사이트의 웹 브라우저에이 오류가 표시되었습니다 : 다른 컴퓨터에서 사이트 코드 git 소스 및 데이터베이스를 설정 한 후 .
therobyouknow

(2/2 부) 문제를 해결하기 위해 lightning_layout을 제거하고 다시 설치하려고했습니다. drush pm-uninstall lightning_layout작동했지만 그런 다음 다시 설치하려고하면 drush en lightning_layout"PreExistingConfigException.php 줄 65 : lightning_layout에서 제공하는 구성 객체 (field.storage.node.panelizer)가 이미 활성 구성에 있습니다"라는 오류가 발생했습니다. 솔루션 : drush config-delete field.storage.node.panelizer 다음 모듈을 다시 활성화 할 수있었습니다 :drush en lightning_layout
therobyouknow

1
어떤 "설정"을 삭제해야하는지 잘 모르는 경우 "drush config-list"를 실행하여 정확한 구성 이름을 가져와야합니다
Jorge Valvert

3

모듈이 이미 설치 구성으로 존재하는 구성 엔티티를 대체하지 않을 수 있기 때문에이 것은 지원되지 않습니다.

기존 노드 유형에 대한 양식 및보기 모드 구성을 추가하려면 hook_install ()의 코드에서이를 구현해야합니다.

또는 사이트에서 먼저 노드 유형을 삭제해야하지만 컨텐츠도 삭제해야합니다.

그리고 아니오, 이것은 버그가 아니며, 구성 손실을 막기 위해 정의 된 방법입니다.


이것은 매우 슬프다. D7에서는 가능했습니다 (기능을 통해 기본 페이지에 필드 추가). 나는 아직도 그것이 D8에도 있어야한다고 생각합니다. 구성 손실을 방지하는 것이지만 실제로는 구성 (필드, 무게, 레이블 등) 만 추가하면됩니다. 내 자신의 사용자 정의 모듈 에서도이 문제가 발생했습니다.
기 illa 보이스

아니요, 추가하지 않습니다. 보기 및 양식 표시는 단일 노드 유형의 모든 필드에서 공유됩니다. 두 모듈이 해당 파일을 추가하려고하면 누가 이길까요? 이미 페이지 유형에있는 기존 필드는 어떻게됩니까? 기본 노드 유형이 존재하지만 사용자 필드와 설정이 다른 경우 어떻게됩니까? 이와 같은 동작 시나리오는 정의되어 있지 않습니다. 독립형 기능의 경우 고유 한 노드 유형을 정의하고 자신의 사이트에이 변경 사항을 배치하는 것이 좋습니다. 7.x와 같은 기능 모듈이 필요하지 않습니다. 구성을 내보내고 다시 가져올 수 있습니다.
Berdir

@berdir 이것은 매우 흥미 롭습니다. 따라서이 문제에서보기 및 양식 메모가 포함 된 사용자 프로필 기능을 만들려고합니다. 사용자 콘텐츠 유형이 이미 존재하고 해당 기능을 활성화하려고하기 때문에 기능에서이 작업을 수행 할 수 없다고 말하고 있습니까? 누군가가 기존 사이트에서 프로필 기능을 사용할 수 있도록 기능이이를 재정의 할 수있는 방법이 있습니까?
kaleemclarkson

@kaleemclarkson user는 컨텐츠 유형이 아니라 엔티티 유형입니다. 그것을 수행하는 유일한 방법은 내가 설명한 것입니다. 폼을 설정하고 디스플레이 구성을 보려면 기능 모듈의 hook_install ()에 코드를 구현해야합니다. 또는 프로파일 모듈을 사용하여 고유 한 프로파일 유형을 정의하십시오.
Berdir

3

모듈을 찾았습니다. 쉬운 설치 모듈을 사용하여 devel 또는 drush를 사용하지 않고 활성 구성을 제거 하십시오 . 모듈의 구성 파일 ( yml ) 에서 옵션 폴더와 시행 옵션 을 놓친 경우에도 작동합니다


1
이것은 환상적인 옵션입니다! 나는 오늘 이것을 사용했고 그것은 너무 많은 시간을 절약했습니다!
rtd1123

3

판테온 사이트에 대해 동일한 문제가 있습니다. 나는 돌진 명령을 입력

Pantheonsite : drush @ pantheon.SITENAME.ENVNAME 구성 삭제 ERRORNAME

로컬 사이트 : drush config-delete ERRORNAME

그것은 나를 위해 일하고 있습니다.



0

구성을 사용자 정의 모듈에 추가하려고하지만 구성이 이미 활성 구성에 존재하고 어떤 이유로 인해 drush를 사용하여 해당 구성을 삭제 할 수없는 경우 (내 경우에는 설치 프로파일의 일부이므로) 확실합니다. 구성을 덮어 쓰는 데는 아무런 문제가 없습니다. 구성을 바꾸는 방법이 있습니다.

사용자 정의 모듈 / config / hook_install에 새 폴더를 추가하고 해당 폴더에 구성 .yml 파일을 추가 한 다음 모듈의 hook_install에 추가하십시오.

use Drupal\Component\Serialization\Yaml;

/**
 * Implements hook_install().
 */
function mymodule_install() {

  // Replace these configs.  We're using code to do this, as they are already
  // installed.
  $config_files = [
    'language.types',
    'language.negotiation',
  ];

  foreach ($config_files as $config_id) {
    $raw_data = file_get_contents(drupal_get_path('module', 'mymodule') . '/config/hook_install/' . $config_id . '.yml');
    \Drupal::configFactory()->getEditable($config_id)
      ->setData(Yaml::decode($raw_data))
      ->save();
  }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.