如何解决 drush command needs a higher bootstrap level to run

drush是一个命令行shell,是专门为drupal做的站点管理脚本。通过drush我们能方便的看到drupal站点的状态,启用或者禁用某个模块以及升级drupal的版本。在帮助客户升级drupal站点期间,我遇到一个问题,当我执行站点升级命令drupal up时,它会提示”Command pm-update needs a higher bootstrap level to run - you will need to invoke drush from a more functional Drupal environment to run this command.”

 如下图所示:

屏幕快照 2016-09-22 下午6.49.12.png

 其中给了一个页面可能会有解决方案http://drupal.org/node/1428638。我在这个页面里看了半天,试过其中一些我认为可能的解决方案,例如其中有一个解决方案提到把settiing.php文件里的 'host' => 'localhost' 改为'host'=>' 127.0.0.1'。我试了,没有效果。

我仔细看了一下网站,运行正常!MySQL,PHP-FPM服务运行都正常!接下来通过网上搜索,查看drush的官方文档等。越来越多的文章将我引向PHP版本跟drush版本及drupal版本的适配问题上来。如下图所示:

屏幕快照 2016-09-23 下午3.41.20.png

我根据以上描述,尝试了其中的组合,都没能解决这个问题。之后又陆陆续续花了两天时间在网上搜索,寻找可能的解决方案,最后发现都是无用功。

为了能让客户的网站尽快升级到最新的版本,最后我采用了非常规的办法。先将客户的站点部署到本机环境中,即公司办公用的电脑。通过本机的drush up命令完成升级。之后再转移网站文件及数据到客户的站点服务器中。然后这个问题就被搁置了,也没找到原因。

直到后来再次遇到这个问题,我才开始重新思考原因。我是怎么又遇到这个问题的呢?我新买了个MacBookPro,有时需要在这台机器上工作,因此重新搭建了一个PHP、MySQL等环境,一切都是新的!安装的drupal测试站点运行也很正常!然而当我开始用drush脚本管理站点,例如用drush pml 查看站点中安装的模块信息时,这个问题再一次出现了,我非常的吃惊!但这次我并没有怀疑软件版本的问题,因为一切都是新的,一切都是我亲手打造的。

由于是我自己的电脑,所以软件的各项配置比较熟悉。在尝试了一些方法后,我突然意识到MySQL数据库程序并没有配置到PATH环境变量中。每次进入mysql,我都需要先执行 cd  /usr/local/mysql/bin,然后 ./mysql -u root -p。会不会是这个原因引起的呢?有了这个猜测后我马上把 /usr/local/mysql/bin放入系统的环境变量PATH中,测试drush pml,报错信息果然消失了!在感叹自己机智的同时,我也感慨自己的无能,一个这么简单的问题,尽然能困扰我这么久。现在回过头来想想,也情有可原,客户服务器的环境多种多样,我不可能每个都记得一清二楚。

通过这个问题,我得到一个经验,使用drush维护drupal站点时,最好能先确认一下php、mysql、nginx等是否配置到了PATH环境变量中。这样可以避免出现一些类似于“drush command needs a higher bootstrap level to run”等问题。

检查的系统环境变量PATH的命令有env、printenv、echo $PATH。 例如:

屏幕快照 2016-09-23 下午4.36.00.png

查看上面的路径,确认一下是否包含了你要用到的php、mysql、nginx等。

或者用 which、whereis命令测试一下php、mysql等是否能被找到。

或者用 php —help,mysql —help等测试一下这些命令是否能够执行。