¿Cómo vuelvo a ejecutar las actualizaciones (cambiar la versión del esquema del módulo)?


22

Estoy trabajando en un módulo y cambié un par de tipos de campo en el esquema. No hice una copia de seguridad antes de probarla y estropeé la base de datos (es solo un sitio de desarrollo). De todos modos, reinstalé todo, y la versión del esquema está configurada con la de la actualización más alta. Sin embargo, en realidad necesito ejecutar la actualización; una vista que no instalaría si tuviera el esquema actualizado en el código del módulo, así que pensé que sería una buena forma de probar esa actualización.

¿Cómo restablezco la versión de esquema de mi módulo a una versión en particular? En Drupal 7, hubiera hecho esto:

drush sqlq "UPDATE system SET schema_version=8102 WHERE name='flllpdf' AND type='module'"

Respuestas:


47

Si bien el acceso al estado funciona directamente, también puede usar la API: drupal_set_installed_schema_version () . Que en realidad existe sin cambios al menos desde 4.7, como se ve en la página de documentación vinculada. Probablemente una de las pocas funciones API que existió durante tanto tiempo;)

Para configurarlo desde drush:

drush ev "drupal_set_installed_schema_version('fillpdf', 8012)"

Nota: en Drupal 7 necesita agregar más include 'includes/install.inc';.


55
También es bueno si simplemente necesita verificar rápidamente: drush ev "echo drupal_get_installed_schema_version ('MODULE')"; api.drupal.org/api/drupal/core%21includes%21schema.inc/function/…
ben.hamelin

o drush pm-info modulename
Beanluc

10

Drupal 8 ahora usa el keyvalueservicio para almacenar información sobre la versión del esquema. Esta es la misma API que utiliza la API de estado .

La información del valor se serializa cuando se almacena en la base de datos, por lo que el uso de una consulta SQL directa es subóptimo. En su lugar, use drush php-eval(o un script que inicie Drupal, si no tiene Drush) para ejecutar lo siguiente:

<?php
  \Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102);
?>

Cambie fillpdfy 8102a su nombre de módulo y la versión de esquema deseada, respectivamente.

La forma Drush de este comando es:

drush ev "\Drupal::keyValue('system.schema')->set('fillpdf', (int) 8102)";


0

Para CONFIGURAR y OBTENER actualizaciones del módulo a través del código (sin Drush). Debajo está el código

GET  = drupal_get_installed_schema_version('moduleName');

SET = drupal_set_installed_schema_version("moduleName", "8000");

0

También puede ir a actualizarlo directamente en la base de datos. Si está utilizando algo como Sequel Pro (mac) o cualquier herramienta de interfaz de usuario de la base de datos que Windows / Linux tenga, es realmente fácil. Podría decirse que no es la mejor idea, y no recomendaría hacerlo contra una base de datos de nivel de producción, ¡pero hará el trabajo!

Tabla = valor_clave

colección = system.schema
name = fillpdf (your_module)
valor = actualizar a i: 8102;

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.