1
WordPress 4.7 正式版前几天发布了,今天登录后台提示有新版本,点击「现在更新」后,页面加载一段时间后变空白,再次点击「现在更新」后,提示:另一更新正在进行。
这个问题已经不是第一次遇到了,上一个版本升级的时候也遇到了。那时以为是个偶然问题就没多花心思去找原因,直接下载最新版手动升级了。但这次是第二次遇到了,就没法对它视而不见了。
2
打开 Chrome DevTools 对这个升级过程进行多次分析,发现 update-core.php?action=do-core-upgrade 这个请求每次均在加载30秒左右后停止。说明 WordPress 在发起下载安装包请求后,在30秒后仍未下载完成导致请求连接中断。
解决方法也很简单,无非是以下几种:
- 加大带宽
- 减小更新包体积
- 加大请求响应时间
由于前两种方法适用性不是很广,所以下面的解决方案是针对第三种方法:加大请求响应时间。
3
去除提示:另一更新正在进行
WordPress 在执行更新的时候数据库会生成一条记录用于防止同一时间重复更新,因此需要先把这条记录删除后下次才能在线更新。
如果用 SSH 登录服务器操作的话,执行以下命令登录 MySQL :
mysql -uroot -p //输入 MySQL root 账户密码
选择数据库,找到那条记录并删除,例如我找到的记录 option_id 是40301,那就执行:
use database; // database 替换为你的WP数据库 select * from wp_options where option_name like '%lock%'; delete from wp_options where option_id = 40301;
加大请求响应时间
request_terminate_timeout 是 php-fpm.conf 中的一个参数,用于控制单个请求的超时中止时间,默认值30秒。
通过加大 request_terminate_timeout 的值,就可以彻底解决。执行以下命令修改:
sudo vi /etc/php5/fpm/pool.d/www.conf; //通过 vi 编辑你的 php-fpm 配置文件
在 www.conf 找到 request_terminate_timeout 30s 这一行,值修改为300s
request_terminate_timeout 300s
重启 php5-fpm 后配置生效
sudo service php5-fpm restart
最后点击「现在更新」,耗时3分钟左右终于更新完毕,问题至此解决。