Finalmente comecei a olhar seriamente para o Drupal 8 e estou particularmente interessado no gerenciamento de configurações. Encontrei algo que poderia ser um pouco problemático e que diz respeito ao conteúdo de blocos personalizados.
Percebo que o sistema de gerenciamento de configuração é capaz de exportar a configuração do bloco - região, tema, peso, visibilidade etc. No entanto, o conteúdo real do bloco não é encontrado na exportação da configuração, o que é razoável e compreensível.
Ao importar essa configuração de bloco para um site de produção, o que parece acontecer é que a configuração do bloco é criada e uma mensagem de espera é colocada no local, informando que o bloco está quebrado ou ausente. Obviamente, o conteúdo do bloco não existe no servidor de produção.
Como os blocos personalizados podem ser migrados de um servidor de desenvolvimento / temporariedade para um servidor de produção? Percebo que os blocos no Drupal 8 são entidades de campo como nós e, portanto, precisam ser migrados da mesma maneira. Entendo que existe uma API Migrate no Drupal 8, mas isso parece ter sido desenvolvido para a migração de conteúdo dos sites Drupal 6 e 7 para Drupal 8 em oposição aos sites Drupal 8 e Drupal 8.
Esse problema refere-se especificamente aos blocos personalizados, pois os blocos gerados por outros módulos, como o Views, serão obviamente migrados como configuração.
Respostas:
Outra resposta que não vi mencionada aqui é usar o módulo Simple Block , que é praticamente idêntico à configuração do 'Custom Block' do núcleo, mas em vez de ter um híbrido estranho de conteúdo + configuração, você tem todas as configurações e conteúdo do bloco armazenado na configuração, que pode ser exportada e importada corretamente.
Consulte, para uma discussão mais aprofundada no núcleo do Drupal 8: Blocos personalizados não podem ser exportados e importados adequadamente .
fonte
Acabei de publicar um módulo contribuído que resolve isso. Essencialmente, o módulo fornece um tipo de bloco com base na configuração (o bloco fixo) que envolve um bloco personalizado (o bloco de conteúdo). Se o bloco de conteúdo não existir, ele será criado com um conteúdo padrão ou vazio se nenhum conteúdo padrão foi definido. Tudo é feito através da interface do usuário, nenhum arquivo especial ou módulo personalizado é necessário.
Eu o nomeei Conteúdo de bloco fixo e é publicado em:
https://www.drupal.org/project/fixed_block_content
fonte
Outra abordagem para manter o conteúdo adicionado como parte do desenvolvimento também levado ao vivo é usar o módulo Conteúdo Padrão para exportar o conteúdo. Ele foi criado para o conteúdo a ser exportado para a pasta 'content' de um perfil de instalação e, em seguida, o módulo, se ativado, traz automaticamente o conteúdo quando o site é instalado, mas também é possível importar o conteúdo, um item de cada vez. , como em um gancho de atualização, com o código abaixo em example.install ou example.profile:
Exporte um bloco personalizado com um ID 8:
(Se você não definir o caminho do seu perfil nas configurações de Drush, precisará especificá-lo acima.)
E use a exportação resultante no seu arquivo example.install como este:
http://data.agaric.com/easily-add-content-update-hooks-use-default-content-module-exports-create-content-needs-be-sync-conf
fonte
Não tenho certeza se vejo fortes vantagens em sincronizar configurações de blocos entre vários ambientes, pois os blocos estão tão entrelaçados com o conteúdo.
A razão para isso é que há um novo bloco sendo criado a partir dos arquivos yml que não possui título / corpo (conteúdo) e, portanto, está dando a mensagem 'quebrado / ausente'.
Você pode tentar criar o UUID (se quiser fazer o bloco nos dois lugares - verifique se o nome da máquina corresponde ...) na tabela de desenvolvimento block_content corresponde ao que você possui na produção (os outros relacionamentos parecem usar a entidade identidade). Então, quando você faz uma sincronização de configuração, pode ver as 'Visualizar diferenças' nos arquivos yml e, possivelmente, ver o que mais você precisa alterar no dev para fazer com que ele corresponda aos uuids de produção, etc. Consegui que isso funcionasse, mas ainda assim é mais fácil ignorar todas as suas configurações de bloco no código, a menos que você passe por esse processo ou crie algum tipo de sincronização de bloco de banco de dados para si mesmo usando block_content, block_content__body e block_content_field_data.
Não é muito elegante, mas pode permitir que você mantenha suas configurações de bloco no código. Caso contrário, se você continuar implantando blocos com a configuração, eles sempre estarão 'quebrados ou ausentes'.
Outra postagem do blog sugere a criação de um bloco personalizado no ambiente ativo, mas não o colocando. Após a sincronização do banco de dados com o dev, o bloco personalizado pode ser configurado, exportado a configuração e, como ele já existe na importação ao vivo da veiculação, é possível.
fonte
Tendo o mesmo problema e não realmente uma solução, apenas acréscimos: no desenvolvimento colaborativo, estamos usando um servidor intermediário que extrai do repositório e redefine toda a configuração. Isso significa que a configuração do bloco está sendo redefinida automaticamente; você simplesmente não pode colocar os blocos que considera como "conteúdo" diretamente nesse servidor.
É fácil usar a sincronização drush config-export, sabendo exatamente o que você fez e tendo certeza de que quaisquer alterações nas configurações são destinadas à implantação. Mas Drupal decide para nós que os blocos são de configuração (enquanto obviamente o conteúdo do bloco é tratado como conteúdo). Portanto, isso parece estar quebrado pelo design.
Pelo tempo previsto, acho que a solução mais prática seria adicionar os arquivos yml relacionados ao bloco no .gitignore.
fonte
No entanto, também não tenho certeza, se você não encontrou nenhuma solução, consulte este módulo https://www.drupal.org/project/deploy . Francamente falando, não me lembro de poder implantar blocos push do DEV para o PROD ou não.
fonte
Eu acho que a melhor maneira de lidar com isso seria:
Isso é o que eu costumo ver pessoas usando e eu pessoalmente uso. Mas sincroniza o banco de dados inteiro em comparação apenas com o conteúdo do bloco.
fonte
Por favor, tenha em mãos o módulo de sincronização de estrutura .
Passos:
fonte