Estoy extendiendo un módulo que he escrito anteriormente y necesita algunos cambios de esquema que implemente hook_update_N
.
He actualizado la versión del módulo de 7.x-1.0
a 7.x-1.1
e implementó el foo_update_7100
y trabaja muy bien.
El problema es que he cometido un error por dentro foo_update_7100
y ahora que lo he solucionado no puedo volver a ejecutar la actualización 7100. Necesito crear una 7101, pero eso no tiene sentido porque todavía no se han confirmado todos mis cambios.
Intenté restablecer el estado de hook_update_n a través de:
update system set schema_version=-1 where name='foo';
> Query OK, 1 row affected (0.01 sec)
> Rows matched: 1 Changed: 1 Warnings: 0
Luego lo hago drush cc all
pero drush updatedb -y
aún me da "No se requieren actualizaciones de la base de datos".
¿Cómo puedo resolver esto en lugar de simplemente incrementar el hook_update_N
número?
-1
significa que el módulo no está instalado. Siéntase libre de publicar eso como respuesta para que pueda aceptar.Respuestas:
Establecerlo en 0 debería funcionar.
system_schema()
dice que el valor debería ser:fuente
-1
aparezca un módulo que Drupal dice que está habilitado?Para su información, en Drupal 8, la tabla del sistema se ha eliminado, y esta información ahora se almacena en la tabla key_value .
(Como se señaló anteriormente, el valor real debe ser menor que el hook_update_N () que desea repetir, pero más alto o coincidir con la última actualización que no necesita repetirse).
fuente
Hice esto tanto que terminé escribiendo un módulo drush para revertir la versión de actualización en la tabla del sistema. Llamado "uroll" para revertir la actualización.
https://github.com/danshumaker/drush-uroll
Uso: drush uroll --module = mycustommodule --version = 5
Es súper simple pero lo uso todo el tiempo. Esto, combinado con un script de recarga de copia de seguridad de la base de datos, le permite enjuagar y repetir al escribir funciones de actualización.
Espero sea de ayuda para usted. Buena suerte.
fuente
--module=mymodule --version=7299
que establece la tabla del sistema en una antes que la suya. Por lo tanto, en el siguiente dbup se ejecuta su 7300. Entonces, no, no solo le des los dos últimos dígitos, sino el número entero más allá demymodule_update_
lo que sea 9123667 .. :) @Eelke también tiene una buena descripción en su respuesta.Para que su enlace de actualización vuelva a ejecutarse, debe establecer la versión de esquema a 1 debajo del número de secuencia de su enlace .
Técnicamente, cualquier cosa debajo del enlace que desea volver a ejecutar y sobre el enlace de actualización no necesita / desea volver a ejecutar (pero al menos 0; -1 significa que el módulo no está instalado) está bien; si no hay otros enlaces de actualización, eso significa que incluso 0 cae entre esos límites, pero en el caso típico, los enlaces de actualización se incrementan en uno, por lo que solo bajar 1 es la única opción segura si no desea ejecutar más código que el actual gancho de actualización más alto.
El proceso de actualización simplemente verifica ese valor y ve si hay algún enlace de actualización con un número de secuencia más alto. Si es así, los ejecutará en secuencia. (Esto también significa que el proceso de instalación establece la versión del esquema en la correspondiente al enlace de actualización más alto disponible; se supone que después de la instalación, su módulo tendrá un estado correspondiente a ese último enlace de actualización).
fuente