Wordpress Versión 5 - Otra actualización está en progreso

18 dic 2018, 00:45:28
Vistas: 2.07K
Votos: 3

Sé que una pregunta similar se ha hecho antes, pero esto NO es un duplicado porque es específico para WordPress 5+ y las respuestas a la pregunta similar no han funcionado.

Problema:

Mi WordPress es la Versión 5.01 y hay algunos problemas técnicos. Los logs de errores PHP indican que el core de WordPress necesita ser reinstalado (errores de sintaxis en consultas SQL del core con variables $vars vacías).

Sin embargo; cuando intento reinstalar WordPress desde el área de administración; aparece el mensaje:

Otra actualización está actualmente en progreso

He probado todas las soluciones en esta pregunta y no son válidas o no aplican (todas han sido intentadas para confirmar esto):

  • El archivo .maintenance ha sido desactivado manualmente.
  • La tabla <...>_options NO contiene la etiqueta .lock de actualización de WordPress. A pesar de que esto aparece confirmado en el código PHP.
  • Todos los plugins han sido desactivados.
  • El bloqueo no expira después de 15 minutos.

Aún así no puedo encontrar ni la causa de la notificación ni la notificación en sí en el código PHP, para anularla manualmente (referencia aquí nuevamente).

Solicitud:

¿Cómo puedo anular el mensaje "Otra actualización está en progreso" en WordPress 5? Esta solicitud es específica para WP5 ya que parece que el sistema puede haber cambiado desde antes de la versión 5.0.

Actualización

No busco [solo] cómo solucionar el problema; sino más bien una explicación de cómo se genera el texto "Otra actualización está en progreso" en WordPress 5.

Gracias por cualquier orientación sobre esto.

1
Comentarios

Solo notar que también me he encontrado con esto y lo solucioné con una actualización manual, como sugirió @Keonramses. Sin embargo, después de la actualización manual, si intento actualizar usando el panel de control nuevamente, la actualización se atascará en Desactivando el modo de mantenimiento" y si luego intento otra actualización desde el Panel de control, obtendré Otra actualización está actualmente en progreso* que puedo resolver eliminando la opción core_updater.lock. Esto está ocurriendo en mi máquina de desarrollo con Windows ejecutando XAMPP 5. En resumen; la actualización manual lo soluciona para mí pero no estoy exactamente seguro de cuál es la causa.

Dave Romsey Dave Romsey
18 dic 2018 01:39:01
Todas las respuestas a la pregunta 4
1

Puedes intentar realizar una actualización manual, siempre y cuando no hayas realizado cambios en los archivos principales de WordPress (si lo hiciste, te sugiero que los anotes y los vuelvas a aplicar después de la actualización). Solo dirígete a WordPress.org, descarga el paquete más reciente de WordPress y cópialo en la carpeta raíz de tu servidor. Asegúrate de sobrescribir solo los archivos principales de WordPress, excluyendo la carpeta wp-content. Ingresa tus detalles en el archivo wp-config.php y eso probablemente solucionará este problema para ti.

PD: Recuerda hacer una copia de seguridad de tu base de datos y de las carpetas originales de WordPress antes de continuar.

18 dic 2018 01:16:02
Comentarios

Hola, gracias, sí, estoy al tanto de la actualización manual pero no sabía si había otro ajuste/método que pudiera realizar para evitar esta necesidad. Gracias. +1

Martin Martin
18 dic 2018 10:59:38
0

También obtendrás este error si WordPress no puede insertar un lock en la tabla wp_options. Puede ser que la tabla no esté configurada correctamente, por ejemplo, cuando se copia de otra fuente. El campo option_id debería ser autoincremental o la actualización fallará. Verifica si puedes insertar manualmente una entrada de bloqueo en la base de datos:

INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES ('core_updater.lock', '1', 'no');

Si el campo option_id no es autoincremental y esta consulta falla, necesitarás hacer que el campo option_id sea autoincremental. Es posible que necesites eliminar el índice en este campo antes de hacerlo autoincremental.

4 abr 2019 13:58:47
0

No estoy seguro si esto ayudará a expandir la conversación para resolver esto, pero he reducido el mensaje de error a las líneas 118-122 del archivo class-core-upgrade.php (wp-admin/includes)

// Bloqueo para evitar múltiples actualizaciones del núcleo.
$lock = WP_Upgrader::create_lock( 'core_updater', 15 * MINUTE_IN_SECONDS );
if ( ! $lock ) {
    return new WP_Error( 'locked', $this->strings['locked'] );
}

La función create_lock está en el archivo class-wp-upgrader.php en las líneas 885-918

Insertando códigos echo antes de los returns, pude reducirlo a estas líneas en la función (899-901)

// Si no se pudo crear un bloqueo, y no hay un bloqueo, salir.
if ( ! $lock_result ) {
    return false;
}

Por alguna razón, puedo consultar el código anterior mediante RouteXL y se genera un bloqueo, pero WP falla al insertar la consulta en la línea 893

$lock_result = $wpdb->query( $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'no') /* LOCK */", $lock_option, time() ) );

Insertando esta línea justo después de la 893

echo $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'no') /* LOCK */", $lock_option, time() );

me muestra el código echo cuando hago una actualización

INSERT IGNORE INTO `wp_options` ( `option_name`, `option_value`, `autoload` ) VALUES ('core_updater.lock', '1606851384', 'no') /* LOCK */

Ejecuté esta consulta manualmente y inserta la fila correctamente en la base de datos MySQL usando el mismo usuario/contraseña que mi instalación de WP.

No estoy completamente seguro de por qué WordPress falla al hacer esto, pero puedo hacerlo manualmente usando las mismas credenciales.

1 dic 2020 19:45:18
0

Modifiqué la función create_lock para producir algunos códigos de error e información. También cambié la consulta eliminando el IGNORE después de INSERT y finalmente me da un error al intentar actualizar con MySQL:

update-core.php ahora genera:

Actualizar WordPress
QUERY[ INSERT INTO `wp_options` ( `option_name`, `option_value`, `autoload` ) VALUES ('core_updater.lock', '1606853111', 'no') /* LOCK */ ]
QUERY ERROR[ Entrada duplicada 'core_updater.lock' para la clave 'option_name' ]
Aquí es donde estoy fallando
Ya hay otra actualización en progreso.

Entrada duplicada 'core_updater.lock' para la clave 'option_name' ¡Por eso está fallando!

¿Lo más extraño? ¡No veo esa línea o valor en mi tabla wp_options! ¡Muy muy extraño! ¡Ahora necesito ver por qué dice que es un duplicado, aunque esta opción no existe en mi base de datos!

class-wp-upgrader.php (modificado para producir datos de diagnóstico)

public static function create_lock( $lock_name, $release_timeout = null ) {
    global $wpdb;
    if ( ! $release_timeout ) {
        $release_timeout = HOUR_IN_SECONDS;
    }
    $lock_option = $lock_name . '.lock';

    // Intentar bloquear
    $q = $wpdb->prepare( "INSERT INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, 'no') /* LOCK */", $lock_option, time() );
    $lock_result = $wpdb->query( $q );

    echo "QUERY[   $q   ]<br>";
    echo "QUERY ERROR[   ".$wpdb->last_error."   ]<br>";
    //$test_result = $wpdb->query( "INSERT INTO wp_options (option_name, option_value, autoload) VALUES('ZZZ', '1', 'no')");
    //if( ! $test_result ) echo "test failed";
        
    if ( ! $lock_result ) 
    {
        $lock_result = get_option( $lock_option );

        // Si no se pudo crear un bloqueo y no hay un bloqueo, salir
        if ( ! $lock_result ) {
            echo "Aquí es donde estoy fallando<br>";
            return false;
        }

        // Verificar si el bloqueo sigue siendo válido. Si lo es, salir
        if ( $lock_result > ( time() - $release_timeout ) ) {
            return false;
        }

        // Debe existir un bloqueo expirado, limpiarlo y volver a adquirirlo
        WP_Upgrader::release_lock( $lock_name );
        return WP_Upgrader::create_lock( $lock_name, $release_timeout );
    }

    // Actualizar el bloqueo, ya que en este punto definitivamente tenemos un bloqueo, solo necesitamos ejecutar las acciones
    update_option( $lock_option, time() );

    return true;
}
1 dic 2020 20:11:40