Synology群晖WordPress安装插件无法更新问题的解决方法

前文好不容易解决了一个弱智的127.0.0.1的数据库链接问题。Wordpress也正常安装了,但突然发现插件(Plugin)这边无法安装插件(Add New)。提示:发生了预料之外的错误。WordPress.org或是此服务器的配置可能出了一些问题。(An unexpected error occurred. Something may be wrong with WordPress.org)……

其实在发现这个问题之前,安装完Wordpress之后,我第一件事情是想把站点语言改成简体中文。但是发现在设置里面,没有Site Langurage。这个问题和Plugin这边报错其实问题是一样的。其根本原因就是Wordpress没有测通api.wordpress.org,因此报错了。由于目前只在群晖里安装碰到这个问题,其它环境是否会遇到,不清楚。

找了很长时间资料,有人说是默认插件(Airplane Mode)的问题,把插件禁用就好了。但目前的Wordpress4.9.8版本并没有这个插件,而且默认没有启用任何插件。也有人设置了DNS,解决了问题,但是这个方法我没试,因为DNS太不稳定了。我尝试了设置代理,果然报错消失了,可以连到Wordpress应用市场里了,说明测通了api.wordpress.org。然后我尝试在完全不用代理情况下,在本地Ping api.wordpress.org,发现可以ping通。再群晖里面测试,也能够ping通。但是为什么不用代理就会报这个错呢?

经过一番研究发现。这个An unexpected error occurred. 错误是在\wordpress\wp-admin\includes\plugin-install.php返回的。错误类型是cURL error 28: Resolving timed out after 10001 milliseconds。在这个plugin-install.php中可以确定,检测的网址就是http://api.wordpress.org/plugins/info/1.0/。也就是刚才我尝试用代理是否能ping通的地址。

继续研究后得知,Wordpress其实并没有用Ping命令来检测api.wordpress.org,而是使用了curl来检测api.wordpress.org。curl是一个利用URL规则在命令行下工作的文件传输工具。它支持文件的上传和下载,所以是综合传输工具。我尝试再到群晖里,通过ssh连接群晖,测试curl命令,发现在不用代理情况下,命令执行得很慢,但是能成功。可能时间太长,超时了,因此返回了这个错误。


分析了一大堆,问题找到了,解决方法也想了几个。先把curl测试命令贴一下:

curl -v api.wordpress.org

也有人用参数 -vvv,其实效果是相同的,都一样。

再说一下解决方法。

解决方法一:在群晖里面Web Station中,PHP设置中,去掉curl扩展。PHP5.6或者PHP7.0都这样操作。

去掉之后,这个错误可以消除。

解决方法二,在/etc/hosts中手动添加api.wordpress.org地址。

198.143.164.251 api.wordpress.org

自己先ping一下api.wordpress.org,看看返回ip是多少。然后更新到/etc/hosts中。

解决方法三,想更新的时候用一下代理。只需要在群晖控制面板中网络代理中设置一下即可。

上述三个方法应该都可以解决这个问题。但是当群晖系统更新后,方法二hosts中手动添加的东西可能会消失,比较麻烦。

希望上述解决方法能给到面临同样问题的朋友得到启迪。

特别感谢此文:WordPress theme cannot be updated/installed: Something may be wrong with WordPress.org or this server

发表评论

电子邮件地址不会被公开。 必填项已用*标注