Cum să rezolvi eroarea "Another update is currently in progress" în WordPress 5

18 dec. 2018, 00:45:28
Vizualizări: 2.07K
Voturi: 3

Știu că o întrebare similară a fost pusă înainte, dar aceasta NU este o duplicat deoarece se referă specific la WordPress 5+ și răspunsurile la întrebarea similară au fost încercate fără succes.

Problema:

Am WordPress versiunea 5.01 și apar unele probleme tehnice. Jurnalele de erori PHP indică faptul că nucleul WordPress trebuie reinstalat (erori de sintaxă în interogările SQL de bază cu variabile $vars goale).

Totuși, când încerc să reinstalez WordPress din zona de administrare, primesc mesajul:

O altă actualizare este în curs de desfășurare

Am încercat toate soluțiile din această întrebare și sunt invalide sau neaplicabile (toate au fost testate pentru confirmare):

  • Fișierul .maintenance a fost dezactivat manual.
  • Tabelul <...>_options din director NU conține tag-ul .lock pentru actualizarea WordPress. Deși acest lucru apare confirmat în codul PHP.
  • Toate plugin-urile au fost dezactivate.
  • Blocajul nu expiră după 15 minute.

Totuși, nu reușesc să găsesc nici cauza notificării, nici notificarea în sine în codul PHP, pentru a o suprascrie manual (vezi referința aici din nou).

Cerință:

Cum pot suprascrie mesajul "O altă actualizare este în curs de desfășurare" în WordPress 5. Această cerință este specifică WP5 deoarece sistemul pare să se fi schimbat față de versiunile anterioare 5.0.

Actualizare

Nu caut [doar] o soluție de rezolvare a problemei; ci mai degrabă o explicație despre cum este generat textul "O altă actualizare este în curs de desfășurare" în WordPress 5.

Vă mulțumesc pentru orice îndrumare în acest sens.

1
Comentarii

Doar notez că am întâmpinat și eu această problemă și am rezolvat-o cu o actualizare manuală, așa cum a sugerat @Keonramses. Cu toate acestea, după actualizarea manuală, dacă încerc să actualizez din nou folosind panoul de control, actualizarea se blochează la Dezactivarea modului de întreținere și dacă încerc apoi încă o actualizare din Panoul de control, voi primi mesajul *O altă actualizare este în curs de desfășurare*, pe care îl pot rezolva prin ștergerea opțiunii core_updater.lock. Acest lucru se întâmplă pe mașina mea de dezvoltare Windows care rulează XAMPP 5. Pe scurt: actualizarea manuală rezolvă problema pentru mine, dar nu sunt exact sigur care este cauza.

Dave Romsey Dave Romsey
18 dec. 2018 01:39:01
Toate răspunsurile la întrebare 4
1

puteți încerca să faceți o actualizare manuală, atâta timp cât nu ați făcut modificări la fișierele de bază ale WordPress (dacă ați făcut, vă sugerez să le notați și să le reaplicați după actualizare). Mergeți pe WordPress.org, descărcați cel mai recent pachet WordPress și copiați-l în folderul rădăcină de pe server. Asigurați-vă că suprascrieți doar fișierele de bază ale WordPress, lăsând folderul wp-content în afara acestei operațiuni. Introduceți detaliile dvs. în fișierul wp-config.php și aceasta ar trebui să rezolve problema pentru dumneavoastră. PS. Nu uitați să faceți o copie de rezervă a bazei de date și a folderelor originale WordPress înainte de a continua.

18 dec. 2018 01:16:02
Comentarii

Salut, mulțumesc, da, sunt conștient de actualizarea manuală, dar nu știam dacă există vreo altă modificare/metodă pe care aș putea să o aplic pentru a ocoli această necesitate. Mulțumesc. +1

Martin Martin
18 dec. 2018 10:59:38
0

Veți primi această eroare și dacă WordPress nu poate insera un lock în tabela wp_options. Este posibil ca tabela să nu fie configurată corect, de exemplu atunci când este copiată dintr-o altă sursă. Câmpul option_id ar trebui să fie autoincrement, altfel actualizarea va eșua. Verificați dacă puteți insera manual o intrare de blocare în baza de date:

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

Dacă option_id nu este autoincrement și această interogare eșuează, va trebui să setați câmpul option_id ca autoincrement. Poate fi necesar să eliminați indexul din acest câmp înainte de a-l seta ca autoincrement.

4 apr. 2019 13:58:47
0

Nu sunt sigur dacă acest lucru va ajuta la extinderea discuției pentru a rezolva problema, dar am restrâns mesajul de eroare la liniile 118-122 din fișierul class-core-upgrade.php (wp-admin/includes)

// Blocare pentru a preveni efectuarea mai multor actualizări simultane ale nucleului.
$lock = WP_Upgrader::create_lock( 'core_updater', 15 * MINUTE_IN_SECONDS );
if ( ! $lock ) {
    return new WP_Error( 'locked', $this->strings['locked'] );
}

Funcția create_lock se află în fișierul class-wp-upgrader.php pe liniile 885-918

Adăugând coduri echo înaintea instrucțiunilor return, am reușit să identific aceste linii în funcție (899-901)

// Dacă nu s-a putut crea o blocare și nu există o blocare, ieșim.
if ( ! $lock_result ) {
    return false;
}

Din anumite motive, pot interoga codul de mai sus prin RouteXL și se generează o blocare, dar WP nu reușește să insereze interogarea pe linia 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() ) );

Inserând această linie imediat după 893

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

obțin codul afișat când efectuez o actualizare

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

Am rulat această interogare manual și inserează corect rândul în baza de date MySQL folosind același utilizator/parolă ca în instalarea WP.

Nu sunt complet sigur de ce WordPress nu reușește să facă acest lucru, dar eu pot să o fac manual folosind aceleași credențiale.

1 dec. 2020 19:45:18
0

Am modificat funcția create_lock pentru a produce niște coduri de eroare și informații. De asemenea, am schimbat interogarea eliminând IGNORE după INSERT și în cele din urmă îmi dă o eroare când încerc să actualizez cu MySQL:

update-core.php acum generează:

Actualizează 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' ]
Aici e punctul în care eșuez
Altă actualizare este în curs de desfășurare.

Duplicate entry 'core_updater.lock' for key 'option_name' Acesta este motivul pentru care eșuează!

Partea ciudată? Nu văd acea linie sau valoare în tabelul meu wp_options! Foarte, foarte ciudat! Acum trebuie să văd de ce spune că este o duplicare, chiar dacă această opțiune nu există în baza mea de date!

class-wp-upgrader.php (modificat pentru a produce date de diagnosticare)

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

    // Încearcă să blocheze.
    $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 );

        // Dacă o blocare nu a putut fi creată și nu există o blocare, renunță.
        if ( ! $lock_result ) {
            echo "Aici e punctul în care eșuez<br>";
            return false;
        }

        // Verifică dacă blocarea este încă validă. Dacă da, renunță.
        if ( $lock_result > ( time() - $release_timeout ) ) {
            return false;
        }

        // Trebuie să existe o blocare expirată, șterge-o și obține-o din nou.
        WP_Upgrader::release_lock( $lock_name );
        return WP_Upgrader::create_lock( $lock_name, $release_timeout );
    }

    // Actualizează blocarea, deoarece până acum cu siguranță avem o blocare, doar trebuie să declanșăm acțiunile.
    update_option( $lock_option, time() );

    return true;
}
1 dec. 2020 20:11:40