drupal 8 – ¿Cuál es el propósito de las actualizaciones de entidades drush?

Pregunta:

Después de actualizar los módulos de Drupal 8, se me advirtió en la página de estado de Drupal 8 que:

Definiciones de entidad / campo: se detectaron los siguientes cambios en el tipo de entidad y las definiciones de campo.

Después de un poco de búsqueda en Google, parece que la solución a esto es ejecutar drush entity-updates . Sin embargo, encuentro esto un poco extraño, ya que parece ser otro comando que uno necesita recordar o incorporar en el flujo de trabajo después de actualizar la base de datos, sin mencionar que no parecía inmediatamente obvio sobre cómo abordar la advertencia original.

Además, a menudo ocurre que en el desarrollo tendrá una alerta para otras acciones en la página de estado, lo que significa que no sabrá de inmediato si debe actuar.

¿Alguien puede explicar para qué es esta advertencia, o más bien, por qué se ha introducido esta función en D8 y por qué no se incluye en la operación de actualización de la base de datos, sino que debe ejecutarse por separado?

Respuesta:

drush entity-updates es una herramienta de desarrollo. Si cambia las definiciones de entidad / campo en su módulo personalizado, puede aplicar esto rápidamente.

En producción, esto no debería suceder. Si actualiza un módulo entre lanzamientos oficiales, entonces el código de actualización en el módulo debería manejar esto.

Pero en su caso, está mencionando que su sitio está en desarrollo. Así que hay muchas cosas que podrían haber causado esto. Ya sea en su propio código o en versiones dev o alfa de los módulos contrib.

Encontré este ejemplo de las funciones de actualización CR Write para actualizaciones de esquemas de entidad, automatización eliminada (donde hay más ejemplos):

/**
 * Add 'revision_translation_affected' field to 'node' entities.
 */
function node_update_8001() {
  // Install the definition that this field had in
  // \Drupal\node\Entity\Node::baseFieldDefinitions()
  // at the time that this update function was written. If/when code is
  // deployed that changes that definition, the corresponding module must
  // implement an update function that invokes
  // \Drupal::entityDefinitionUpdateManager()->updateFieldStorageDefinition()
  // with the new definition.
  $storage_definition = BaseFieldDefinition::create('boolean')
      ->setLabel(t('Revision translation affected'))
      ->setDescription(t('Indicates if the last edit of a translation belongs to current revision.'))
      ->setReadOnly(TRUE)
      ->setRevisionable(TRUE)
      ->setTranslatable(TRUE);

  \Drupal::entityDefinitionUpdateManager()
    ->installFieldStorageDefinition('revision_translation_affected', 'node', 'node', $storage_definition);
}

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım