怎样在日常工作中使用Drush Make

Drush Make因作为构建Drupal发行版的高级工具而知名。但其在发行版之外的一些方面也很有用。一个很好的例子就是给系统打补丁(Patches)。在这篇文章里,我将分享在我的日常工作中是如何使用Drush Make,并在这个过程中让我发现一些很棒的Drupal特性的。

Drush Make命令

Drush Make包含2个命令,并且在Drush中内置了。

  1. make - 把.makefile应用到Drupal系统。
  2. make-generate - 从当前的Drupal系统创建.makefile。

两个命令都是与.makefile(包含Drush Make说明的格式化文本)相关的。你可以在这里看更多关于.makefile的语法。

重建你的开发环境

你多久需要安装一个新的,干净的Drupal站点用于开发,测试或者演示?除了核心,开发者通常会有一些自己喜欢的必装模块,比如Administration Menu, Views等。使用Drush Make你可以极大地自动化这个过程,仅仅需要把你需要的模块放到一个配置文件里,让Drush Make为你自动化的下载和安装。下面是一个.makefile的例子,你可以用于一个多语言的测试站点。

; Drush Make API version.
api = 2
; Drupal core.
core = 7.x

;Common modules.
projects[admin_menu][subdir] = "contrib"
projects[ctools][subdir] = "contrib"
projects[token][subdir] = "contrib"
projects[views][subdir] = "contrib"

; Development modules.
projects[devel][subdir] = "development"

; Multilingual modules.
projects[fallback_language_negotation][subdir] = "contrib"
projects[variable][subdir] = "contrib"
projects[i18n][subdir] = "contrib"
projects[i18nviews][subdir] = "contrib"

; Load some translations.
translations[] = de
translations[] = ru

这个文件可以存放到本地的任何地方,例如:~/.drush/make-files/d7_i18n.make,也可以放到远程服务器,例如Github。

要使用这个文件,让我们假设要新建一个自定义站点,在/var/www/drupal_test.local。

drush make d7_i18n.make /var/www/drupal_test.local

首次执行可能时间会比较长,但是下次执行Drush将尽可能的使用缓存,根据.makefile的定义,最新的Drupal核心和第三方模块,翻译文件将被下载并放到合适的位置。现在你可以去你的站点的URL,访问install.php,或者使用Drush来安装。

drush si --db-url="mysql://user:password@localhost/databasename" --site-name="Drupal Multilingual"

除此之外,通过--tar选项,你可以根据.makefile直接生成压缩包。

drush make d7_i18n.make drupal_multilingual --tar

再添加一些Features,你就能得到你自己的发行版。

下载依赖文件

你以前注意过一些第三方模块的源文件里提供了.make或者.make.example这样的文件么?这些模块通常包含一些额外的库(比如,Colorbox模块需要jQuery Colorbox插件)。这些文件可以在Drupal的代码目录使用Drush Make来下载,要加上--no-core选项。举个例子,假如你需要为Chosen模块下载它的依赖库:

$ drush dl chosen
Project chosen (7.x-2.0-beta4) downloaded to sites/all/modules/contrib/chosen.

$ drush make sites/all/modules/contrib/chosen/chosen.make.example --no-core chosen
downloaded from https://github.com/harvesthq/chosen/releases/download/v1.1.0/chosen_v1.1.0.zip

在这个例子中,jQuery插件被下载并解压到libraries目录,是不是很方便?

对于模块开发者,如果你使用任何额外的JS库,请添加一个.make.example文件到你的Drupal官网项目,而不是创建一个Drush命令来做同样的事(像drush chosen-plugin那样,来自于Chosen模块)。

从当前站点生成.makefile

你能够很容易地使用Drush Make分享一个自定义的Drupal站点,只需要运行drush generate-makefile,以及生成一个当前站点的大纲。

drush generate-makefile drupal_custom_build.make

生成的drupal_custom_build.make文件将包含所有开启项目及版本的说明,如果一个项目有.git文件夹,Drush Make将自动设置合适的属性。

projects[redirect][type] = "module"
projects[redirect][download][type] = "git"
projects[redirect][download][url] = "http://git.drupal.org/project/redirect.git"
projects[redirect][download][branch] = "7.x-1.x"
projects[redirect][download][revision] = "0b7b8dc2d58cb277874d87c91c45f0a361e148f7"

这个文件仍然需要一个快速的人工审核,例如你需要添加一些补丁的声明,例如,我的项目中为Redirect模块打了两个补丁。

projects[redirect][patch][] = "https://drupal.org/files/issues/redirect-global-905914-145.patch"
projects[redirect][patch][] = "https://drupal.org/files/issues/redirect.circular-loops.1796596-146.patch"

.makefile文件对于你想跟同事分享工作环境非常有用,并且明确的定义信息也方便排查问题。

额外的好处,探索Drupal世界

最后,Drush Make文件自己是一个很好的用来发现新的好模块的方法。比如看看发行版Commerce Kickstart和OpenScholar里提供的.makefile,里面有许多有趣的第三方扩展。我希望这篇文章能帮你更广泛的使用Drush,去自动化的完成一些任务,甚至构建你的第一个发行版。