Exportar e versionar configurações do banco de dados com Features e Strongarm | iMasters
Olá, pessoal! Hoje vou falar de um assunto muito comum e recorrente; praticamente essencial para o trabalho em grupo e que facilita muito o versionamento das coisas inseridas em banco de dados: Features e Strongarm.
Features é um módulo fantástico, que nos permite exportar várias coisas configuradas no banco de dados do Drupal, como tipos de conteúdo, campos, entidades, esquema de permissões, entre outras coisas. Podemos fazer uma analogia e dizer que é um módulo para gerar módulos. Basicamente, ele pega informações que estão registradas em banco de dados e coloca em código, na forma de módulo, com a denominação de Feature. Assim, em outra instalação Drupal, podemos instalar essa Feature gerada, que teremos tudo aquilo escrito no código, inserido no banco de dados. O módulo Strongarm é essencial para trabalhar bem com Features, pois permite exportar variáveis definidas em banco de dados para o código gerado por uma Feature, expandindo as possibilidades de geração de Feature, possibilitando também a interação e compatibilidade com outros módulos que guardam informações no banco.
Tipo de conteúdo "Galeria de Imagens", com título (title padrão), descrição (body padrão) e imagens (campo múltiplo adicional);
Nível de permissão para dois papéis de usuários (redator e editor).
Todas essas definições podem ser feitas por um site builder, via interface do Drupal, sem precisar programar. Assim, tudo fica gravado em banco de dados. Não vou entrar nos detalhes das configurações, pois o intuito aqui é mostrar como gerar uma Feature, que ao ser instalada, já conterá todas as definições.
Nome: É o nome da feature, que também será o título do módulo, exibido na administração. Ao preenchê-lo, será dado um nome de máquina, editável, que seguindo as boas práticas de organização, terá um nome diferente do título, determinando o nome do módulo;
Descrição: Informação descritiva exibida na administração de módulos. É opcional, mas como boa prática, informo de forma resumida em quê consiste essa feature;
Package: O pacote em que a feature se enquadra. O mais comum é levar o nome do projeto em que estou trabalhando, mas também pode levar um nome mais genérico;
Versão: É a versão da feature (ou módulo). A cada modificação, vou incrementar o número, para ajudar a ter um controle de versão;
URL of update XML: Opcional. Caso eu tenha um XML em algum lugar para atualização da feature, informo aqui;
Path to generate feature module: Aqui podemos inserir um caminho informando onde os arquivos da feature serão salvos. Uma boa idéia é usar sites/all/modules/custom/custom_modulename, de acordo as boas práticas. Assim, depois de escolher os componentes da feature, basta clicar no botão 'Generate feature', que os arquivos serão gerados no caminho indicado. Nota: É necessário que o diretório de destino tenha permissão de execução e escrita (chmod 777);
Opções de comportamento para gerar a feature: Podemos definir alguns comportamentos interessantes, como detectar automaticamente as dependências logo que escolhermos algum componente e não deixar que a feature seja criada caso algum conflito for detectado;
Componentes: Aqui é onde escolhemos o que compõe nossa feature. Basta marcar os checkboxes referentes às configurações que queremos exportar em forma de módulo. Assim, tudo que for escolhido, passará de banco de dados para código;
Legenda: Indica qual a situação de cada componente selecionado;
ATENÇÃO: Nessa feature eu incluí papéis de usuários. Isso não é uma boa prática, visto o tipo de feature e o uso dela. Mas incluí assim mesmo, somente para exemplificar e mostrar que é possível exportar isso em feature. Quando precisamos exportar configurações desse tipo, mais genérica, o mais sensato é criar uma feature de nome abrangente, tipo "Core", "Nome do projeto" ou coisa parecida. Sabendo das boas práticas, podemos ter mais produtividade e evitar erros ou conflitos. Todos entendidos?
Sabendo disso, podemos fazer as configurações necessárias que adicionarão os novos requisitos no pacote de funcionalidades. Isso vai ter um comportamento muito interessante, pois quando voltarmos na página de administração das features, veremos a nossa "Galeria de imagens" exibindo o estado "Sobrescrito". Outra coisa interessante é que, se estiver com o módulo Diff instalado, aparecerá uma nova aba "Review overrides" na visualização da Feature, que ao acessada exibirá exatamente o que foi alterado, nos padrões de Diff comuns, assim:
Agora podemos recriar a feature, para poder adicionar as novas configurações no código. Vamos seguir o mesmo procedimento, só que ao invés de "criar" uma nova, vamos "recriar" a existente. Assim podemos ver que a Feature insere automaticamente alguns elementos e também podemos inserir os elementos adicionais, conforme visto na imagem acima.
O status "padrão" quer dizer que o código da feature e as informações no banco de dados estão iguais, ou seja, está tudo de acordo e nada precisa ser alterado.
É isso pessoal! Acredito que abordei as principais questões sobre o uso de Features e como usar. Seguindo essas dicas, certamente terá uma boa experiência. Qualquer coisa, já sabe, né? Deixe um comentário aí!
Artigo publicado originalmente em Drupal de Elite: http://drupaldeelite.com.br/blog/exportar-e-versionar-configuracoes-do-banco-de-dados-com-features-e-strongarm