Excluir configuração da importação / exportação

16

Eu pensei que esse era um caso de uso simples do novo sistema de gerenciamento de configuração, mas não tive sorte em descobrir como resolver isso:

Problema

Desejo armazenar a configuração no git e usar drush para exportar a configuração durante o desenvolvimento e, em seguida, importar a configuração. Bem parecido com a reversão de recursos no Drupal 7. Meu problema é que não quero armazenar códigos de acesso no git para várias integrações. Isso resulta na exclusão dessas configurações em
$ drush cim -y

Onde eu olhei

Eu esperava que houvesse uma lista / configuração simples para configurações que deveriam ser excluídas na importação / exportação. Parece que houve em algum momento, mas deve ter sido removido novamente, uma vez que está disponível no momento no Drupal 8.

Examinei como as alterações de configuração estão sendo feitas comparando o armazenamento ativo e de sincronização para ver se existe um local onde eu poderia remover as alterações, mas esse não parecia ser o caso. Eu olhei o quanto a configuração é importada, pois tem algumas configurações excluídas, mas não parecia extensível. Eu olhei ConfigEvents, mas tudo isso parece acontecer após uma importação, então não parece que isso possa ser usado.

Estou faltando alguma coisa ou não é possível simplesmente excluir configurações da importação / exportação?

googletorp
fonte

Respostas:

7

Não é possível ter exclusões especificamente, mas há algo.

Assim como $ conf no Drupal 7, há $ config em settings.php que você pode usar para substituir qualquer coisa na configuração localmente. O formato é $config['name.of.config']['nested']['key'].

Observe que tudo o que está armazenado na configuração ainda está no git, portanto, você precisa manter nenhum ou seus códigos de acesso de teste no git. Além disso, a interface do usuário mostrará o que realmente está armazenado na configuração e atualmente não fornecerá nenhuma indicação de que ela foi substituída. Existem problemas pendentes para melhorar isso.

Entendo que isso tem limitações, mas, no momento, não é possível manter algo fora da configuração exportada. Até onde sei.

Berdir
fonte
Então, basicamente, você precisa definir / atualizar a configuração no seu arquivo settings.php em vez de usar a interface.
googletorp
Sim, isso não é novidade. Nada mudou no fluxo de trabalho neste contexto no d8.
11

Você pode usar o módulo "Config Ignore": https://www.drupal.org/project/config_ignore

Já experimentou que a configuração do seu site foi substituída pela configuração no sistema de arquivos ao fazer um drim cim?

Não mais!

Este módulo é uma ferramenta para permitir que você mantenha a configuração desejada.

Weri
fonte
2
config_ignore é provavelmente o mais estável e simples solução atualmente disponível, e esta solução provavelmente melhores endereços desejo do OP para ter "uma simples lista / configuração para configurações que devem ser excluídos na importação / exportação"
bdanin
7

Você pode usar uma combinação de config_ignore e config_split para isso.

A opção Ignorar configuração permite ignorar um subconjunto de entidades de configuração durante a importação (também impede exclusões desde a versão 2.x). Infelizmente, isso não impede a exclusão da configuração durante a exportação.

Para excluir entidades de configuração durante a exportação, você pode usar o config_split, criar uma nova entidade config_split e deixar a pasta vazia. Isso impede que a configuração seja exportada para o sistema de arquivos; em vez disso, exporta-o no banco de dados.

Eu escrevi Excluir configuração do gerenciamento de configuração no Drupal 8 sobre este tópico.

Geert van Dort
fonte
5

Para dividir as configurações, você pode usar https://www.drupal.org/project/config_split .

Digite config_split que fornece um comando do console do Drupal para importar e exportar a configuração filtrada. A integração do drush provavelmente ocorrerá em breve (afinal o filtro é inspirado no filtro --skip-modules de drush).

Você pode dividir as exportações em diferentes diretórios que você pode ignorar.

Houve uma apresentação muito agradável em drupal con dublin 2016 pelas pessoas encarregadas da iniciativa CMI, que exorto você a conferir, não importa o quê.

Potney Switters
fonte
2

Acabei de testar o @berdir na resposta nº 1 e ele funciona perfeitamente. Só eu adiciono uma pequena nota: você tem que colocar toda a configuração nesta var, completa. Fora isso, $ config var não funciona corretamente.

Algo assim:

 $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',
);

Documentação: https://www.drupal.org/node/1928898

Observe a documentação acima: "Observe que os valores substituídos via $ config em settings.php não serão visualizados na interface de administração do Drupal."

estoyausente
fonte
3
Você não deveria ter que fazer isso. Ele deve mesclar os valores que você definir, mas talvez não funcione conforme o esperado em algumas estruturas.
Berdir
Oh, eu não poderia fazê-lo corretamente. Vou tentar depurá-lo novamente e, se não funcionar corretamente, talvez eu possa abrir um bug no d.org. Obrigado!
estoyausente
1
Posso confirmar que você pode fazer algo como$config['module.settings']['some']['value'] = 'foo';
googletorp
2

Eu me pergunto um pouco por que ninguém mencionou as ferramentas Drush CMI até agora. As palavras mágicas são drush cexye config-ignore.yml. Você terá uma lista que pode ajustar. Precisávamos disso uma vez para excluir instâncias de bloco e, ao mesmo tempo, processar as bases de bloco.

Queremos exportar toda a configuração, mas queremos excluir certos padrões.

É aqui que entra a --ignore-listopção drush cexy.

Em nosso projeto, temos uma pasta ./drush, por isso colamos um arquivo em sua chamada config-ignore.yml com o conteúdo da seguinte forma.

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.*

Então agora nós corremos drush cexyassim

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

Portanto, o que isso faz é exportar a configuração ativa e aplicar a lista de ignorados para remover configurações indesejadas.

Então agora, quando você executa, git statusdeve ver apenas as alterações que deseja confirmar.

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

Instalação

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

Fonte: https://github.com/previousnext/drush_cmi_tools

leymannx
fonte
1

Usando a divisão de configuração (recomendada)

O módulo de divisão de configuração foi feito especificamente para essa necessidade.

A divisão de configuração é integrada ao drush.

Usando apenas Drush

Drush também deve ser capaz de fazer isso usando a --skip-modulesbandeira.

Você pode adicionar as seguintes linhas em um drupal / drushrc.php na raiz da web do seu projeto para fazê-lo automaticamente.

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

Consulte http://www.drush.org/en/master/config-exporting/#ignoring-development-modules

Infelizmente, há um erro com esta funcionalidade: https://github.com/drush-ops/drush/issues/1820 . Portanto, no momento, você também precisa adicionar esses arquivos de configuração no seu .gitignore para que os arquivos de configuração exportados não sejam comprometidos. O seu é contínuo para talvez abandonar essa funcionalidade (buggy) do drush em favor da divisão de configuração.

gagarine
fonte
2
Ignorar os arquivos de configuração no git não funciona exatamente. A configuração não exportada será excluída. Por exemplo, as páginas dos painéis personalizados serão excluídas ao importar a configuração.
dobrzyns
@ user157272 mesmo se você importar usando drush com ['config-import'] ['skip-modules']?
gagarine 23/09/16
O drushrc.php pode até ser colocado fora do webroot. Por exemplo, um nível mais alto, útil quando você trabalha com o Drupal em uma configuração do compositor: github.com/drupal-composer/drupal-project .
Leymannx # 12/16
Isso não funcionou para mim. Eu adicionei módulos, mas eles ainda foram adicionados à configuração de ativar / desativar módulos.
Jeremy John
Eu atualizei a resposta com a actual melhor prática (config split)
Gagarine