Wordpress Versione 5 - Un altro aggiornamento è attualmente in corso

18 dic 2018, 00:45:28
Visualizzazioni: 2.07K
Voti: 3

Sono consapevole che una domanda simile sia già stata posta, ma questa NON è un duplicato perché è specifica per WordPress 5+ e le risposte alla domanda simile si sono rivelate inefficaci.

Problema:

Il mio WordPress è alla versione 5.01 e ci sono alcuni problemi tecnici. I log degli errori PHP indicano che il core di WordPress deve essere reinstallato (errori di sintassi nelle query SQL core con $vars vuoti).

Tuttavia; quando provo a reinstallare WordPress dall'area di amministrazione; viene visualizzato il messaggio:

Un altro aggiornamento è attualmente in corso

Ho provato tutte le soluzioni presenti in questa domanda ma sono invalide o non applicabili (sono state tutte testate per confermare questo):

  • Il file .maintenance è stato disabilitato manualmente.
  • La tabella <...>_options nel database NON contiene il tag .lock per l'aggiornamento di WordPress. Nonostante ciò sia confermato nel codice PHP.
  • Tutti i plugin sono stati disabilitati.
  • Il lock non scade e non si risolve dopo 15 minuti.

Non riesco ancora a trovare né la causa della notifica né la notifica stessa nel codice PHP, per poterla sovrascrivere manualmente (riferimento qui di nuovo).

Richiesta:

Come posso sovrascrivere il messaggio "Un altro aggiornamento è attualmente in corso" in WordPress 5. Questa richiesta è specifica per WP5 poiché sembra che il sistema possa essere cambiato rispetto alla versione precedente a 5.0.

Aggiornamento

Non sto cercando [solo] una soluzione alternativa al problema; vorrei piuttosto una spiegazione su come viene generato il testo "Un altro aggiornamento è attualmente in corso" in WordPress 5.

Grazie per qualsiasi indicazione su questo argomento.

1
Commenti

Vorrei solo segnalare che ho riscontrato anch'io questo problema e l'ho risolto con un aggiornamento manuale, come suggerito da @Keonramses. Tuttavia, dopo l'aggiornamento manuale, se provo ad aggiornare nuovamente utilizzando la dashboard, l'aggiornamento si blocca su Disabilitazione della modalità manutenzione e se poi provo un altro aggiornamento dalla Dashboard, riceverò il messaggio *Un altro aggiornamento è attualmente in corso* che posso risolvere eliminando l'opzione core_updater.lock. Questo succede sulla mia macchina di sviluppo Windows con XAMPP 5. Per farla breve: l'aggiornamento manuale risolve il problema per me, ma non sono esattamente sicuro di quale sia la causa.

Dave Romsey Dave Romsey
18 dic 2018 01:39:01
Tutte le risposte alla domanda 4
1

puoi provare a fare un aggiornamento manuale, purché non abbia apportato modifiche ai file core di WordPress (se l'hai fatto ti suggerisco di prenderne nota e riapplicarle dopo l'aggiornamento). Basta andare su WordPress.org, scaricare l'ultimo pacchetto di WordPress e copiarlo nella cartella principale del tuo server. Assicurati di sovrascrivere solo i file core di WordPress, lasciando fuori la cartella wp-content. Inserisci i tuoi dettagli nel file wp-config.php e questo dovrebbe probabilmente risolvere il problema per te. PS. ricordati di fare un backup del tuo database e delle cartelle originali di WordPress prima di procedere.

18 dic 2018 01:16:02
Commenti

Ciao, grazie sì sono consapevole dell'aggiornamento manuale ma non sapevo se ci fosse un altro tweak/metodo che potessi eseguire per aggirare questa necessità. Grazie. +1

Martin Martin
18 dic 2018 10:59:38
0

Riceverai questo errore anche se WordPress non riesce a inserire un lock nella tabella wp_options. Potrebbe essere che la tabella non sia configurata correttamente, ad esempio quando viene copiata da un'altra sorgente. Il campo option_id dovrebbe essere autoincrement altrimenti l'aggiornamento fallirà. Verifica se riesci a inserire manualmente una voce di lock nel database:

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

Se il campo option_id non è autoincrement e questa query fallisce, dovrai rendere il campo option_id autoincrement. Potresti dover rimuovere l'indice da questo campo prima di impostarlo come autoincrement.

4 apr 2019 13:58:47
0

Non sono sicuro se questo aiuterà ad espandere la conversazione per risolvere il problema, ma ho individuato che il messaggio di errore viene generato dalle righe 118-122 del file class-core-upgrade.php (wp-admin/includes)

// Blocco per prevenire aggiornamenti multipli del Core.
$lock = WP_Upgrader::create_lock( 'core_updater', 15 * MINUTE_IN_SECONDS );
if ( ! $lock ) {
    return new WP_Error( 'locked', $this->strings['locked'] );
}

La funzione create_lock si trova nel file class-wp-upgrader.php alle righe 885-918

Inserendo echo prima dei return, sono riuscito a individuare che il problema è in queste righe della funzione (899-901)

// Se non è possibile creare un blocco e non esiste già un blocco, interrompi.
if ( ! $lock_result ) {
    return false;
}

Per qualche motivo, riesco a interrogare il codice sopra tramite RouteXL e viene generato un blocco, ma WP non riesce a inserire la query alla riga 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() ) );

Inserendo questa riga subito dopo la 893

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

ottengo questo codice echo quando eseguo un aggiornamento

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

Ho eseguito questa query manualmente e inserisce correttamente la riga nel database MySQL utilizzando le stesse credenziali utente/password della mia installazione WP.

Non sono del tutto sicuro del motivo per cui WordPress non riesce a farlo, mentre io riesco a farlo manualmente con le stesse credenziali.

1 dic 2020 19:45:18
0

Ho modificato la funzione create_lock per produrre alcuni codici di errore e informazioni. Ho anche cambiato la query rimuovendo l'IGNORE dopo INSERT e finalmente mi dà un errore quando provo ad aggiornare con MySQL:

update-core.php ora genera:

Aggiorna WordPress
QUERY[ INSERT INTO `wp_options` ( `option_name`, `option_value`, `autoload` ) VALUES ('core_updater.lock', '1606853111', 'no') /* LOCK */ ]
QUERY ERROR[ Duplicate entry 'core_updater.lock' for key 'option_name' ]
È qui che sto fallendo
Un altro aggiornamento è attualmente in corso.

Duplicate entry 'core_updater.lock' for key 'option_name' Questo è il motivo per cui fallisce!

Il colpo di scena? Non vedo quella riga o quel valore nella mia tabella wp_options! Molto molto strano! Ora devo capire perché dice che è un duplicato, anche se questa opzione non esiste nel mio database!

class-wp-upgrader.php (modificato per produrre dati di diagnostica)

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';

    // Prova a creare il lock
    $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 );

        // Se non è stato possibile creare un lock e non esiste un lock, esci
        if ( ! $lock_result ) {
            echo "È qui che sto fallendo<br>";
            return false;
        }

        // Controlla se il lock è ancora valido. Se lo è, esci
        if ( $lock_result > ( time() - $release_timeout ) ) {
            return false;
        }

        // Deve esistere un lock scaduto, cancellalo e riprova
        WP_Upgrader::release_lock( $lock_name );
        return WP_Upgrader::create_lock( $lock_name, $release_timeout );
    }

    // Aggiorna il lock, a questo punto abbiamo sicuramente un lock, dobbiamo solo attivare le azioni
    update_option( $lock_option, time() );

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