合并建议:回滚自动更新

背景

网站所有者在更新插件时面临的最大风险是遇到菲律宾比索菲律宾比索 WordPress主要使用的web脚本语言。WordPress需要PHP 5.6.20或更高版本导致他们网站崩溃的致命错误。While期间核心核心 核心是运行WordPress所需的一组软件。核心开发团队构建WordPress。自WordPress 3.7以来,更新受自动回滚保护(#22704),没有为插件添加此类保护。尽管WordPress 5.2中添加了致命错误保护和恢复模式,但它需要管理员的手动干预,理想情况下,WordPres应该能够以与Core类似的方式自行恢复。升级/安装团队开始探索回滚插件插件 插件是一个包含一组功能的软件,可以添加到WordPress网站。他们可以扩展功能或为WordPress网站添加新功能。WordPress插件是用PHP编程语言编写的,并与WordPres无缝集成。这些可以在WordPress.org插件目录中免费https://wordpress.org/插件/或者可以是第三方基于成本的插件更新。

插件更新的回滚包括三个功能:

  1. 移动_目录()–在WordPress 6.2中引入(#57375)
  2. 手动更新时插件/主题更新失败的回滚–WordPress 6.3中介绍(#51857)
  3. 遇到故障时插件自动更新的回滚–包含在本提案中(#58281人)

一些背景参考资料

概述

当更新活动插件时,它们会在安装新版本之前短暂停用,然后立即重新激活。由于WordPress 6.3,当管理员手动更新插件时,如果更新导致PHP致命错误,插件将不会被重新激活。在自动更新期间,不会进行此重新激活检查,下次运行站点时,用户将看到死亡白屏(WSOD)。

为了进一步保护网站并增加WordPress中插件自动更新的信心,Rollback Auto-Update功能插件功能插件 一个插件,其创建目的是最终被提议包含在WordPress Core中。请参见作为插件的功能.目的是在自动插件更新期间检测PHP致命错误,然后回滚到以前安装的版本。

此建议是合并在尝试插件自动更新期间默认发生致命错误时也执行回滚所需的更改。

实施

Rollback Auto-Update使用类似于插件或主题文件编辑器。如果遇到PHP致命错误,错误处理程序会记录特定的消息,并恢复之前安装的插件版本。当插件回滚发生时,将向站点的管理电子邮件发送通知(存储在管理员电子邮件选项)通知他们更新和回滚失败。

当前的实现试图通过对主页的环回请求,在自动更新期间检测PHP致命错误。如果环回返回错误,则假定活动插件中存在PHP致命错误,并将恢复更新以确保安全。

回滚有问题的插件后,将继续对队列中的任何其他核心、插件或主题更新进行自动更新。当下次检查自动更新时,WordPress将再次尝试更新同一插件。

以前,维护模式仅在安装更新时启用。然而,测试表明,在剩下的过程中禁用维护模式意味着对站点的主动访问可能会触发错误。这可能有副作用,例如停用插件等。回滚自动更新在所有自动更新期间启用维护模式。虽然启用维护模式的时间更长,但这与在给定时间执行的更新数量有关(通常数量很低),有助于提高自动更新的稳定性。

发布时,此代码正在6000多个运行回滚更新失败功能插件的站点上进行测试,该插件自2023年12月10日发布v7.0.0以来一直包含相关代码。

为了更容易测试中的功能wordpress开发,合并公关(芯-5287)已创建。

由于修改能力的限制wp_is_maintenance_mode()在功能插件中,PR略有不同。该功能插件可供历史参考。所有合并前的测试都应该使用PR来完成。一些贡献者已经在网站上运行PR几个月了。

发送到站点管理电子邮件的电子邮件文本示例。

你好!插件未能在您的网站上更新https://test.xxxx.net。

请立即检查您的网站。可能一切都在运转。如果有可用的更新,您应该更新。

以下插件更新失败。如果更新中出现致命错误,则已还原以前安装的版本。

  • 不应使用此插件(从版本0.1到0.2):https://wordpress.org/plugins/this-plugin-should-not-be-used/

要管理站点上的插件,请访问插件页面:https://test.xxxx.net/wp-admin/plugins.php

如果你遇到任何问题或需要支持WordPress.org网站WordPress.org网站 用户创建和共享WordPress代码的社区站点。您可以在这里下载WordPress核心、插件和主题的源代码,以及社区对话和组织的中心位置。https://wordpress.org/支持论坛可能会有所帮助。
https://wordpress.org/support/forums网站/

WordPress团队

测试

目前,没有与回滚自动更新直接相关的已知问题在Core中不存在。

我(@阿夫拉根)一直在使用测试插件。插件位于测试站点上,处于活动状态,并设置为自动更新。从今年年初开始,我就一直这样使用PR,在其他网站上使用功能插件已经有好几年了。

  1. 将PR安装到WP 6.5.x或大旅行箱大旅行箱 Subversion中的一个目录,包含为下一个主要发布周期做准备的最新开发代码。如果您运行的是“trunk”,那么您使用的是最新版本。.
  2. 安装0.1版测试插件.
  3. 激活测试插件并启用自动更新。

WordPress.org更新美国石油学会美国石油学会 API或应用程序编程接口是一种软件中介,允许程序相互交互并以有限的、明确定义的方式共享数据。将提供0.2版本的插件,这将导致PHP致命错误。要确认回滚成功,数据将写入error.log(错误.log)在自动更新过程中的每一点,创建一个审计跟踪,用户可以使用它来识别回滚自动更新的流程和结果。此日志记录仅用于测试目的。

常见问题解答

了解PR的最新发展。请评论GitHub公关如果发现任何问题。 

  • 如果环回请求不起作用,会发生什么情况?
    • 正如不起作用的环回请求的Site Health消息所示:“环回请求用于运行计划的事件,并且还被主题和插件的内置编辑器用于验证代码稳定性。”
    • 如果环回请求不起作用,则不应运行自动更新。如果环回请求因超文本传输协议超文本传输协议 HTTP是超文本传输协议的缩写。HTTP是万维网使用的底层协议,该协议定义了消息的格式和传输方式,以及Web服务器和浏览器应对各种命令应采取的操作。错误时,回滚自动更新会将其视为检测到的PHP致命错误,并恢复所有插件更新。

作为一个项目,重要的是不断评估各种方法,以使大多数用户和网站所有者更容易进行网站管理。提供更安全的插件自动更新只是WordPress自身处理问题的一种方式,这些问题可能需要最终用户无缝地掌握技术专长。

所有反馈都将在接下来的2-3周内收集和处理,目标是大旅行箱毕竟,反馈得到了解决,以确保该功能在早期的夜间构建中得到大量测试WordPress 6.6语言发布周期。

道具:@成本开发@德斯罗什用于审阅和编辑。

#6-6,#特色项目,#功能-自动更新,#合并利润,#回降