Suponha que eu tenho um tipo de conteúdo Person
com campos: Name
, Age
,Email
Esse tipo de conteúdo é controlado por um recurso chamado test
para que eu possa controlá-lo na origem e enviá-lo ao site ativo.
Meu fluxo de trabalho é assim:
- Eu adiciono um novo campo no
Person
chamadoPhone
- localmente eu faço:
drush fu test -y
- Eu edito o
test.info
para aumentar o número da versão - Eu comprometo as alterações no meu repositório
- Envio o recurso para o site ativo (copie os arquivos dos recursos)
- no site ao vivo eu faço:
drush fr test -y
- no site ao vivo eu faço:
drush cc all
Em seguida, o novo campo aparece no site ativo Person
.
Se, na primeira etapa, remover um campo, Person
o campo não será excluído do site ativo. Como eu resolvo isso? Não quero excluí-lo manualmente da interface do usuário no site ativo.
Esse fluxo de trabalho está correto?
Respostas:
Esta é uma faca de dois gumes, é assim para impedir a exclusão de dados, o que é sempre uma coisa boa. Não há realmente nada a resolver, este é um comportamento esperado.
É o mesmo fluxo de trabalho que usamos e trabalha há mais de um ano e funciona muito bem. Eu diria que está correto, mas essa é uma resposta muito subjetiva.
fonte
drush field-delete field
A maneira correta de remover o conteúdo criado pelos Recursos é através do hook_update_N (que deve ser implementado no arquivo
your_module.install
).A principal idéia dos Recursos é gerenciar a configuração com o código. O uso
hook_update_N
é consistente com isso, já que a exclusão do campo está no código (que pode ser gerenciado com controle de versão) - enquanto o comando equivalentedrush field-delete field
não está sendo chamado do código gerenciado; é uma etapa separada da linha de comando que você precisa executar (e lembre-se de executar).fonte
drush field-delete field
funcionar bem?hook_update()
é consistente com isso, pois a exclusão do campo está no código (que pode ser gerenciado com controle de versão) - enquanto o comando drush não está sendo chamado a partir do código gerenciado; é uma etapa separada da linha de comando que você precisa executar (e lembre-se de executar).hook_update_N
.Crie um novo arquivo chamado "your_feature_name.install"
Dentro do arquivo declarar hook_update_N , é possível usar field_delete_field () e especificar o nome do campo que você deseja excluir como parâmetro.
Execute update.php e os campos serão excluídos.
fonte
Se você estiver usando
field_phone
em outras áreas, convém removê-lo do seu tipo de conteúdo de Pessoa, mas não excluí-lo totalmente do seu site. Crie manualmente umYOUR_FEATURE_NAME.install
arquivo na pasta do seu recurso, da seguinte maneira:Se você estava excluindo isso de um parágrafo de pessoa em vez de um tipo de conteúdo de pessoa, poderia alterar a primeira declaração condicional para algo como isto:
fonte