Supongamos que tengo un tipo de contenido Person
con los campos: Name
, Age
,Email
Este tipo de contenido está controlado por una característica llamada, test
por lo que puedo controlarlo desde la fuente y llevarlo al sitio en vivo.
Mi flujo de trabajo es así:
- Agrego un nuevo campo en
Person
llamadoPhone
- localmente hago:
drush fu test -y
- Edito el
test.info
para aumentar el número de versión - Confirmo los cambios en mi repositorio
- Empujo la función al sitio en vivo (copie los archivos de funciones)
- en el sitio en vivo que hago:
drush fr test -y
- en el sitio en vivo que hago:
drush cc all
Luego, el nuevo campo aparece en el sitio en vivo Person
.
Si en el primer paso elimino un campo del Person
campo no se eliminará del sitio en vivo. ¿Cómo puedo solucionar esto? No quiero tener que eliminarlo manualmente de la interfaz de usuario en el sitio en vivo.
¿Es correcto este flujo de trabajo?
Respuestas:
Esta es una espada de doble filo, es así para evitar la eliminación de datos, que siempre es algo bueno. Realmente no hay nada que resolver, este es el comportamiento esperado.
Es el mismo flujo de trabajo que utilizamos y lo hemos estado haciendo durante más de un año y funciona muy bien. Yo diría que es correcto, pero esa es una respuesta muy subjetiva.
fuente
drush field-delete field
La forma correcta de eliminar el contenido creado por las características es a través de hook_update_N (que debe implementarse en el archivo
your_module.install
).La idea principal con Características es administrar la configuración con código. El uso
hook_update_N
es coherente con eso, ya que la eliminación del campo está en el código (que se puede administrar con control de versiones), mientras que el comando equivalentedrush field-delete field
no se llama desde el código administrado; es un paso separado de la línea de comandos que debe realizar (y recordar realizar).fuente
drush field-delete field
funcionará bien?hook_update()
es coherente con eso, ya que la eliminación del campo está en el código (que se puede administrar con control de versiones), mientras que el comando drush no se llama desde el código administrado; es un paso separado de la línea de comandos que debe realizar (y recordar realizar).hook_update_N
.Cree un nuevo archivo llamado "your_feature_name.install"
Dentro del archivo declare hook_update_N , allí puede usar field_delete_field () y especificar el nombre del campo que desea eliminar como parámetro.
Ejecute update.php y los campos serán eliminados.
fuente
Si está utilizando
field_phone
otras áreas, es posible que solo desee eliminarlo del tipo de contenido Persona, pero no eliminarlo por completo de su sitio. Cree manualmente unYOUR_FEATURE_NAME.install
archivo en la carpeta de su función de la siguiente manera:Si estaba borrando esto de un párrafo de persona en lugar de un tipo de contenido de persona, podría cambiar la primera declaración condicional a algo como esto:
fuente