Drush:讨厌鼠标的人的 Drupal
在 Drupal 崛起为卓越地位的十年间,它极大地改变了人们构建网站的方式。无需编写任何代码,Drupal 用户就能够通过点击式的 Web 界面构建复杂的自定义网站。问题是我讨厌 Web 界面。
公平地说,现代 Web 应用程序中键盘快捷键的兴起使它们对我来说更加舒适,但我不喜欢鼠标(甚至不要让我开始说触控板)。我是键盘型的人;双手放在主行上让我快乐。
即使对于那些精通指向设备的人来说,仍然有你无法超越命令行优雅力量的时候。作为 Linux 用户,你们都体验过简单的 shell 脚本来自动化重复性任务的纯粹乐趣(如果你没有,为什么不呢?)。在许多情况下,使用 Drupal 的 Web 界面效率低下或不方便,但事实是,对于大多数 Web 开发人员和系统管理员来说,命令行是一个舒适的地方。
Drush (DRUpal SHell) 是 Drupal 的命令行 shell 和脚本接口,它是一个名副其实的瑞士军刀,旨在让那些花费一些工作时间在命令提示符下进行黑客攻击的人们的生活更轻松。
Drush 几年前开始作为一个项目,旨在为 Drupal 提供命令行界面。尽管早期的实用性有些有限,但 Drush 已经成熟,成为许多 Drupal 开发人员和管理员(包括我自己)必不可少的工具。
当前版本 4.1 带来了大量出色的新内置命令、大量的内部清理以及对 Drupal 7 的更好支持。然而,更令人兴奋的是 Drush 的插件和扩展的增长。虽然不是传统的 Drupal 模块,但 Drush 通过其自身的 API 高度可扩展。现在,许多现有的 Drupal 模块在其官方版本中都包含 Drush 命令。
早期版本的 Drush 需要在安装 Drush 之前安装可用的 Drupal。但是,自从版本 2 以来,Drush 已经变得独立于 Drupal 版本。你不需要可用的 Drupal 站点来安装 Drush。事实上,正如你很快就会看到的,你可以使用 Drush 完全安装你的 Drupal 站点。
在 Debian/Ubuntu 系统上安装 Drush 非常简单,只需运行apt-get install drush。但是,当前稳定的 Debian/Ubuntu 版本包含 Drush 3 的软件包。要获得最新和最好的版本,或者如果你在没有 Drush 软件包的系统上,你需要执行一些额外的步骤
确保你有一个可用的 PHP CLI 版本。这通常可以通过在你的系统上安装 php5-cli 软件包来完成。
从 drupal.org/project/drush 下载 Drush(我目前使用的是“All-versions-4.1”版本)。解压下载的软件包(.zip 或 .tar.gz)并将其放在你不会丢失的地方。我通常将 Drush 放在我的开发机器上的 ~/local/drush 和服务器上的 /usr/local/drush 中,但位置是灵活的。
将 drush 命令添加到你的 $PATH 中。你可以通过几种方式实现这一点。Drush 包含一个 shell 脚本(称为 drush),它尝试确定要使用的“最佳”PHP 解释器并运行 drush.php PHP 脚本。我通常将此脚本符号链接到已在我的 $PATH 中的目录(ln -s /usr/local/drush/drush /usr/local/bin/drush)。或者,你可以将 Drush 安装的路径添加到你的 $PATH,或者为你自己的 shell 别名提供 PHP 脚本本身。有关完整详细信息,请参阅包含的 README.txt 文件。
要测试你的新 Drush 安装,你应该能够在你的终端中运行drush status并看到类似这样的输出
PHP configuration : /etc/php5/cli/php.ini Drush version : 4.1 Drush configuration : Drush alias files :
如果这有效,那么真正的乐趣就开始了!
虽然 Drush 在没有现有 Drupal 安装的情况下也可以工作,但有了一个安装肯定会更有趣。事实上,Drush 最有趣的用途之一是安装新的 Drupal 站点。通常,此过程将包括以下内容:浏览到 drupal.org,单击“Get Started”,然后单击“Download Drupal”,然后单击下载 tar.gz 文件。将该软件包解压到你的 Web 服务器的文档根目录中。为你的新 Drupal 站点创建一个数据库。浏览到你的新 Drupal 安装(即 https:///drupal),你将被投入到安装程序中。开始点击你的方式通过安装程序(你可能会被要求chmod你的设置文件),在七个或更多屏幕后,你将拥有一个可用的 Drupal 安装。当然,很可能从这里你将继续下载一些模块(再次,浏览 drupal.org 并解压 zip 文件)并通过界面点击以启用和配置它们。
哎呀,点击太多了!
好吧,当你安装你的第一个 Drupal 站点时,这还不错,但是它需要花费大量时间使用鼠标,如果你经常安装(或重新安装)Drupal 站点,它可能会变得乏味。让我们看看使用 Drush 的过程
更改到你的 Web 服务器的根目录(cd /var/www).
运行drush dl drupal-7.0。这会从 drupal.org 下载 Drupal 7.0,并将文件解压到 /var/www/drupal-7.0 中。
更改到新创建的目录(cd /var/www/drupal-7.0),然后运行site-install命令
drush site-install --db-url=mysql://root:secret@localhost/drupal
对以下提示回答“y”,在片刻之后,你将拥有一个可用的 Drupal 安装(使用 localhost 上的“drupal”数据库)。要验证,你可以浏览到 https:///drupal-7.0/ 并使用 admin/admin 作为用户名/密码登录。site-install 命令有几个额外的选项;运行drush help site-install以获取完整详细信息。
如果你的站点需要一些 Drupal 贡献模块(大多数人都是这样),该怎么办?还不要伸手去拿鼠标!让我们在这里获取“views”和“devel”(仍然在我们的 Drupal 目录中)
drush dl ctools views devel drush en views views_ui devel
(请注意,ctools 是 Drupal 7 中 Views 的必需依赖项。)
Drush dl 命令(pm-download 的快捷方式)在下载模块以及放置解压文件夹的位置方面非常聪明。默认情况下,它从 drupal.org 获取 .tar.gz 文件并将文件夹放置在 sites/all/modules 目录中,但你拥有完全控制权(包括使用 CVS 检出或文件夹所属的位置)。请参阅drush help dl以获取完整详细信息。
与大多数工具一样,人们开发了自己使用 Drush 的习惯,但这里有一些你可能会欣赏的内置命令(至少在一段时间后)
drush cc(或 cache-clear):Drupal 开发人员很早就学会了在开发时“清除缓存”,因为 Drupal 积极缓存其更复杂的内部数据结构。如果你正在编写代码,那么很可能你附近有一个终端窗口,运行drush cc all将确保当你检查浏览器中的最新工作时,你将准确地看到最新的更改。
drush cron:Drupal 安装指南 (INSTALL.txt) 建议通过添加一个 crontab 条目来运行 Drupal 的定期维护任务,该条目使用 wget 定期获取 http://example.com/cron.php。在 Drupal 7 中,这现在需要一个生成的“cron_key”参数作为 URL 的一部分,以禁止恶意请求。使用 Drush 消除了对密钥的需求,并避免占用 Web 服务器进程来执行定期维护。
drush up(或 pm-update):此命令检查 drupal.org 上所有已安装模块的新版本,并提供下载所有更新并为你运行数据库升级。它甚至处理了那个令人讨厌的、容易忘记的“先备份”步骤。
运行drush help在你的 Drupal 目录中始终会为你提供当前可用命令的列表(基于已安装的模块等等)。有关每个命令的更多信息,请运行drush help <command>.
你可能已经注意到,我们在 Drupal 安装目录内运行了上面的 drush 命令。这允许 Drush 确定要使用哪个 Drupal 站点(和配置选项)。但是,对于那些寻求更多自由的人,特别是那些在 Drupal “多站点”环境中工作的人,你需要使用 Drush 的 --root 和 --uri 开关。这可能会导致大量重复输入。如果你只有一个 Drupal 站点,你可以通过在你的主目录中创建一个 .drushrc.php 文件来指定这些选项(以及更多选项)。有关更多详细信息,请参阅你的 Drush 安装的 examples 文件夹中的 example.drushrc.php 文件。
对于那些在各种版本和安装中处理多个 Drupal 站点的人,Drush 提供了一种“别名”机制来定义常用参数。要为此示例站点创建一个别名,你可以创建一个文件 ~/.drush/aliases.drushrc.php,其中包含以下 PHP 代码
$aliases['example'] = array( 'root' => '/var/www/example/drupal', 'uri' => 'example.com', );
现在你可以使用drush @example <command>从任何目录为你的示例站点运行 drush 命令(例如,drush @example status)。为了使事情变得更好,别名可以通过包含 remote-host 和 remote-user 选项来引用远程站点(通过 SSH 访问)。有关完整详细信息,请参阅你的 Drush 安装的 examples 文件夹中的 example.aliases.drushrc.php 文件。
随着每个新版本的发布,Drush 都包含更多命令,Drupal 模块也越来越多地在其版本中提供 Drush 命令。如果这还不够(并且你不害怕编写一些 PHP),你可以编写自己的 Drush 命令。你的 Drush 安装中的 examples 文件夹包含一个示例命令,make-me-a-sandwich(XKCD 粉丝欢呼!),供那些有兴趣了解更多信息的人使用。
Drush 力量的最大证明之一是 Aegir 托管平台(参见“资源”),它提供了一个大规模托管环境(支持多服务器安装)。虽然它包含 Web 界面,但 Aegir 的所有繁重工作都是通过自定义 Drush 命令完成的。
如果你使用 Drupal 并且讨厌使用鼠标(或更喜欢你的终端),Drush 可以为你节省无数小时的点击,并打开一个全新的脚本化 Drupal 任务世界。
资源
下载 Drush 4: drupal.org/project/drush
方便的在线参考(对于那些仍然喜欢网页的人): drush.ws
已经包含 Drush 支持的模块: drupal.org/project/modules?filters=tid:4654
Drush 别名: developmentseed.org/blog/2010/mar/10/drush-30-more-powerful-flexible-and-magical
对于 Shell 补全爱好者: drupal.org/node/437568
用于大规模托管 Drupal 的 Aegir: www.aegirproject.org
James Walker 是一位长期的 Drupal 开发人员、顾问、培训师和倡导者。他是 O'Reilly 书籍 Using Drupal 的合著者,并且经常可以在 Drupal 会议和活动中发表演讲。在网上以 “walkah” 或通过 walkah.net 找到他。