WordPress版本5-另一个更新当前正在进行中

时间:2018-12-18 作者:Martin

我知道a similar question 之前有人问过,但这是NOT 重复,因为这是特定于Wordpress 5+的,并且对类似问题的回答都已尝试无效。

问题:

我的Wordpress是5.01版,存在一些技术问题PHP错误日志表明需要重新安装核心Wordpress(核心SQL查询中存在错误的语法错误,为空$vars)。

然而在管理区重新安装Wordpress时;它指出:

当前正在进行另一个更新

我已经通读了中的所有答案this question 它们无效或不适用(它们都试图确认这一点):

.maintenance 文件已手动禁用

  • <...>_options 表目录不包含wordpress更新.lock 标签尽管PHP代码中已经确认了这一点参考here 再一次)。

    请求:

    我如何越过;另一个更新当前正在进行中”;在WordPress 5中。此请求特定于WP5,因为系统可能在5.0之前发生了更改,

    更新

    我不是在寻找如何解决这个问题;更多关于文本如何;另一个更新当前正在进行中”;在WordPress 5上生成

    感谢您对此的指导。

  • 4 个回复
    SO网友:Keonramses

    你可以尝试手动更新,只要你没有对WordPress核心文件做任何更改(如果你做了,我建议你记下它们并在升级后重新应用),只需转到WordPress即可。org下载最新的WordPress软件包,并将其复制到服务器上的根文件夹中。确保只覆盖核心WordPress文件,不覆盖wp内容文件夹,将详细信息输入wp配置。php文件,这可能会为您解决这个问题。请记住在继续之前备份您的数据库和原始WordPress文件夹。

    SO网友:RouteXL

    如果WP不能插入lockwp_options 桌子可能是表格配置不正确,例如从其他源复制时。这个option_id 应为自动增量,否则更新失败。检查是否可以手动在数据库中插入锁条目:

    INSERT INTO `wp_options` (`option_name`, `option_value`, `autoload`) VALUES (\'core_updater.lock\', \'1\', \'no\');
    
    如果option_id 不是自动增量,并且此查询失败,您需要option_id 字段自动递增。在使其自动递增之前,可能需要删除此字段中的索引。

    SO网友:Ryan Wehrle

    不确定这是否有助于展开对话来帮助解决这个问题,但我已经将错误消息缩小到由类核心升级的第118-122行生成。php(wp管理/包括)

    // Lock to prevent multiple Core Updates occurring.
    $lock = WP_Upgrader::create_lock( \'core_updater\', 15 * MINUTE_IN_SECONDS );
    if ( ! $lock ) {
        return new WP_Error( \'locked\', $this->strings[\'locked\'] );
    }
    
    函数create\\U lock位于文件类wp upgrader中。php在线885-918

    在返回之前输入回显代码,我可以将其缩小到函数(899-901)中的这些行

    // If a lock couldn\'t be created, and there isn\'t a lock, bail.
    if ( ! $lock_result ) {
        return false;
    }
    
    出于某种原因,我可以通过RouteXL查询上面的代码,并生成一个锁,但WP无法在第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() ) );
    
    在893之后插入此行

    echo $wpdb->prepare( "INSERT IGNORE INTO `$wpdb->options` ( `option_name`, `option_value`, `autoload` ) VALUES (%s, %s, \'no\') /* LOCK */", $lock_option, time() );
    
    更新时给我回显代码

    INSERT IGNORE INTO `wp_options` ( `option_name`, `option_value`, `autoload` ) VALUES (\'core_updater.lock\', \'1606851384\', \'no\') /* LOCK */
    
    我手动运行了这个查询,它使用与我的WP安装相同的用户/过程将行正确插入MySQL数据库。

    我不完全清楚wordpress为什么不能做到这一点,但我可以使用相同的凭据手动完成。

    SO网友:Ryan Wehrle

    我修改了create\\u lock函数以生成一些错误代码和信息。我还更改了删除插入后忽略的查询,最后在尝试使用MySQL更新时出现了一个错误:

    update-core.php 现在生成:

    Update 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\' ]
    There is where I\'m failing
    Another update is currently in progress.
    
    Duplicate entry \'core_updater.lock\' for key \'option_name\'这就是它失败的原因!

    踢球的人?我在我的wp\\U选项表中没有看到该行或值!非常非常奇怪!现在我需要知道为什么它会说它是重复的,即使这个选项在我的数据库中不存在!

    class-wp-upgrader.php (修改以生成diag数据)

    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\';
    
        // Try to 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 );
    
            // If a lock couldn\'t be created, and there isn\'t a lock, bail.
            if ( ! $lock_result ) {
                echo "There is where I\'m failing<br>";
                return false;
            }
    
            // Check to see if the lock is still valid. If it is, bail.
            if ( $lock_result > ( time() - $release_timeout ) ) {
                return false;
            }
    
            // There must exist an expired lock, clear it and re-gain it.
            WP_Upgrader::release_lock( $lock_name );
            return WP_Upgrader::create_lock( $lock_name, $release_timeout );
        }
    
        // Update the lock, as by this point we\'ve definitely got a lock, just need to fire the actions.
        update_option( $lock_option, time() );
    
        return true;
    }
    

    相关推荐

    WP plugin updates

    我为WordPress编写了一个插件,需要定期更新。是否可以通知用户新版本可用(其他一些插件具有某种类型的此选项-当新版本可用时,用户可以在其管理面板中查看并更新-所有内容都使用一些内置的WP功能…)