You are here

Drupal7小版本之间升级实践

朋友有一个网站,需要从Drupal7.8升级到Drupal7.23,在升级的过程中遇到了问题,向我求助,当然是有偿的。开始的时候,我告诉它,只需要下载最新的Drupal7.23,将原来的覆盖掉就可以了。然后运行update.php,这是最简单不过的了。不想这么简单的问题就收别人的钱,另外我确实比较忙。但是朋友说,他这样操作了,但是出现了白屏,整个网站都访问不了了。

我就给他要了账号,SSH账号。使用Winscp连接上去,发现可以下载,无法上传覆盖原有的文件。我将整个程序,下载到本地,创建数据库,导入数据库。遇到了一点小问题,下载的时候,在sites/default下面有个Modules目录,这里竟然放了几个模块,我开始的时候忘记下载这里的了,导致了整个网站只能打开首页,而且非常慢,用户登录页也可以打开,但是登录不了。我下载了sites/default/modules下面的模块以后,就正常了。模块放的哪都是,这是实际项目中经常发生的,不是所有的人都精通Drupal的。我在本地搭建成功后,直接升级,成功了。

我将升级后的数据库上传了上去。让朋友,导入,然后将Drupal程序替换成最新的,因为我没有权限操作。我想这就可以了,或许服务器本身的配置有问题,在本地可以,服务器上应该也可以。

但是朋友这样操作以后,结果和他在线升级的效果是一样的,还是白屏。我想这应该是服务器的配置问题,网页的无法访问的原因很多,linux下面的文件夹的权限问题,DNS问题。

我首先怀疑文件夹的权限问题,将文件目录的所有者改为root,还是不行。是不是域名没有备案,被封了?我上传了一个简单的test.txt文件,通过域名是可以访问到这个文件的。我排除了DNS的问题。这就是说,index.php文件也是可以访问到的。我将settings.php里面的配置修改了一下,把数据库的密码修改了一下,不存在。这下访问首页,看到的不是空白页面,而是数据库连接有问题,也就是说index.php是运行了的。

我将在线的将数据库恢复到原来的,系统正常工作,此时运行升级,操作也是成功的,升级最后阶段,整个页面就空白了。

从Drupal7.8升级到Drupal7.23有问题?我不敢相信,难道是中间的一个版本有问题,我又想到了笨办法,二分法,先从Drupal7.8升级到Drupal7.9,如果成功的话,比如升级到Drupal7.15,然后再测试。

我就从第一步进行测试,Drupal7.8升级到Drupal7.9。下载Drupal7.9,将在线程序替换为Drupal7.9,数据库还原到原来的。升级,升级成功的最后阶段,白屏了,其它页面也都访问不了。原来这里就有问题了。

我再次还原,在升级到Drupal7.9之前,我把能够禁用的所有第三方模块都禁用了,我想排除第三方模块的干扰。只剩下一个link模块,无法禁用。再次升级,运行到最后阶段,运行不下去了,我刷新了一下,报了以下错误:

•Notice: Undefined index: update_success 在 update_results_page() (行 162 在 /var/drupal/update.php).

•Warning: array_pop() expects parameter 1 to be array, boolean given 在 update_results_page() (行 166 在 /var/drupal/update.php).

    这个问题我知道,以前也遇到过,跳过之后,就正常了。然后就是临时文件无法创建这样的错误,我检查了一下,原来文件系统的权限设置有问题。给sites/default/files 777的权限。我以为,问题终于解决了,下去吃了一个饭。

回来后,现在将原来禁用的模块启用,Ctools,I18n,Views等模块,我先启用了,没有问题,最后启用了custom breadcrumbs, entity,profile2,token等模块,启用后,页面白屏了,我通过修改数据库,直接在system表里面,将新启用的这几个模块禁用,但是还是白屏。

没有办法,将前面的操作重新做一遍,在失败之前,做一个备份。然后,对于最后的这四个模块,逐一启用,原来以为是custom breadcrumbs的原因,结果显示正常。实际白屏的原因是启用了entity模块。

难道是模块的不兼容性问题?我看了一下entity模块的项目页面,里面找到这样的一句话:

Compatibility note: If the i18n Translation Sets module (i18n_translation) is used, an i18n version of 1.5 or later is required!

而我要升级的这个网站的i18n版本,却是1.2的,比1.5还要小。Ok,升级I18N模块,最新版本1.10,升级过程中遇到这样的问题:

Fatal error: Call to undefined function variable_store_list_all() in /var/drupal/sites/default/modules/i18n/i18n_variable/i18n_variable.install on line 70

 

解决办法:版本不兼容,导致i18n_variable无法升级,、https://drupal.org/node/1616856,需要下载最新的variable模块,简单的直接升级,还出了一点问题,我重新操作一遍,然后先启用最新版本的variable模块,再启用i18n相关的模块,最后升级,终于成功了。备份,继续尝试启用entity模块,成功了。

模块与模块之间,有时候是有兼容性的问题的,我们看到的是白屏,并不能直接的找到白屏的原因,而是一步一步的排查,逐一的排除。最终才找到原因所在的。而这一步一步的排查工作,却是极琐碎的,这就是生活,过程是枯燥的,结果却有一点欣慰。

论坛:

Drupal版本: