如何通过Makefile使用Drush启用新模块


8

在工作中,我们正在努力在git中设置新站点并进行本地开发。到目前为止,我已经创建了一个drush make文件以及一个安装配置文件,并且已通过puppet编写了此脚本,以便当用户对存储库进行全新克隆时,它将下载所有软件包并运行基本的站点安装。这样就可以了。

现在,我的问题是我何时需要为网站使用新模块。例如,我们为该站点构建一个新模块。我希望其他开发人员从git中提取并自动安装新模块。将其添加到drush make文件中只会导致其被下载,而运行“ drush si”将导致该站点被重新安装,从而清除所有数据。

做到这一点的最佳方法是什么?

编辑

我觉得我没有正确解释。我正在寻找一种基于drush中makefile条目自动启用模块的方法。这个想法是用户签出一个项目,然后如果不存在settings.php文件,我将让木偶运行'drush make'和'drush si'。我需要弄清楚的是,当用户下次进行拉动并且我们添加了一个新模块时,如何通过一些脚本自动启用该模块。如果需要的话,我会写一些东西来解析makefile并手动运行“ drush en”,但是我想找到一些预先构建好的东西。


“ drush en”不是您想要的表现吗?
Sam152

我需要一种自动化的方法。可以从CLI运行'drush en',但是我想要的是一种确定新模块并自动启用它们的方法。
dragonmantank 2013年

1
问题将是,将一个模块作为一组文件存在并不意味着您要启用它。有人必须做出这个决定。例如,如果您下载Views,那么您还将获得Views UI。是否要启用该功能?这是一个有意识的决定。因此,您需要一个模块列表,它也可能在脚本中。
阿尔弗雷德·阿姆斯特朗

对不起,算了。我不确定您的意思,尽管我不确定这一切都通过make完成。
阿尔弗雷德·阿姆斯特朗

1
@AlfredArmstrong的想法是,由于我已经必须整理make文件,因此只能以某种方式使用它。如果我要启用“ devel”功能,而不要启用“ devel_generate”功能,那么make文件中仅包含“ devel”功能。如果以后我决定启用'devel_generate',则将其添加到make文件中。我不想仅根据您提到的原因根据可用的文件来执行此操作,因此我需要以某种方式进行控制。
dragonmantank 2013年

Answers:


4

我在一家拥有大量开发人员/阶段/产品流程的公司工作,该公司试图尽可能地实现自动化。一切都必须用代码完成,使用功能或更新挂钩编写脚本。

基本上,您想要的是拥有1个包含更新挂钩的自定义模块。这样,当开发人员将更新拉到代码库时,他们将运行数据库更新,并且可以执行需要启用/禁用模块的任何功能。更新挂钩不会影响新安装,因为假定模块在安装时已经是最新的,因此只会执行更新的更新。

总结一下:

  1. 继续使用安装配置文件执行必要的安装任务(启用模块等)。
  2. 使用自定义的“更新”模块,该模块使用hook_update_NXXX()启用/禁用新模块,否则将使站点的管理任务保持同步。

是一篇讨论类似方法并提供代码示例的文章。


1

这是一个很好的问题。drush make方便下载模块。我们不想为模块膨胀做出贡献。在这里,情况不以make这种方式扩展。也许功能最适合管理站点的模块启用状态以及其他配置方面。


1

考虑修改您的工作流程。

听起来您想做分布式工作,并以某种方式“共享”启用模块和其他配置值。

如果您考虑一下-即使Drupal的“核心”和Drupal.org都不这样做。代码被提交给在持续构建过程中运行的Core和社区模块。Drupal.org和许多项目都使用Jenkins。

对于面向Drupal开发的Jenkins安装,它也使用Phing,请参见以下git repo:http : //reload.github.io/jenkins-drupal-template/

使用Jenkins,您可以将代码推送到主Git存储库,并通过Installation Profile和Drush Makefile为演示站点构建站点。这不能完全解决您的问题,但是确实提供了1个位置,您都在其中推送更改以添加/启用/删除模块,并希望大家都不会“破坏构建”。

假设构建没有中断-将其更改引入本地开发系统是安全的。

Jenkins +登台或开发服务器仅是一项开发。

您的本地工作流程可以使用安装配置文件+ Makefile。如果您负担得起内容生成时间,请考虑使用带有Migrate的自定义模块共享内容。可以在此处阅读与使用Migrate和Phing用法与开发人员共享内容的示例:

http://marzeelabs.org/blog/2014/03/17/coding-as-a-team-content-fixtures/ http://marzeelabs.org/blog/2014/03/03/coding-as-a-团队自动化使用网络钓鱼/

最后,在2014年俄亥俄州Drupal营的一次会议上观看此PDF,该会议涉及持续集成并与您的团队合作:


1

出于相同的目的,我们使用Master。它使用settings.php提供有关主模块是什么的信息。通过一个简单的命令,drush master-execute所有缺少的模块(及其依赖项)都将启用,不再使用的模块将被禁用。

当前,该模块不从makefile中读取信息,但是对于新版本来说,这可能是一个选择。


0

您可以通过“ 模块”选项手动启用模块,也可以使用drush命令通过终端启用模块

drush en -y modulename1 modulename2 

等等。


我正在寻找一种基于makefile自动执行此操作的方法,而不仅是如何手动启用模块。
Dragonmantank 2013年

0

可以通过两种方式启用模块:

  1. 无论是从使用终端drush通过命令:
    A. drush dl modulename-用于下载模块首先
    B. drush en -y modulename-用于使所述模块

  2. 通过使用“ 模块”菜单选项,然后从显示的模块数中启用模块。


我正在寻找一种基于makefile自动化的方法,而不仅仅是手动启用模块的方法。
dragonmantank 2013年

还有更多方法。module_enable()例如。或通过导入准备好的数据库。
leymannx

0

我要确定这一点。make函数用于通过git下载站点的不同部分:模块,主题和项目。写下安装配置文件时,就是在信息文件中写入依赖的模块。问题是当您需要为现有配置文件的安装配置文件添加新模块时-我正确吗?

为此,当N代表数字更新时,您需要使用hook_update_N。该挂钩用于需要执行以下操作的模块,例如:更新方案,添加变量,并用于站点和分发(例如OpenScholar),以便在活动站点上启用新下载的模块。

您可能需要在最通用的模块中添加它,该函数将如下所示:https://github.com/openscholar/openscholar/blob/SCHOLAR-3.x/openscholar/modules/os/os.install#L16

该挂钩必须位于module.install文件中。如果使用UI,则需要转到www.site.com/update.php;如果使用drush,则只需使用命令drush updb。


0

据我了解,Drush .make文件仅从drupal.org下载项目,如果要启用某些模块,可以使用安装配置文件**(。install)**来完成。安装配置文件为您提供了一些选项,您可以在安装时启用哪些模块。

最近,我还借助.make文件贡献了一个发行版。即使我共享。使的整个体验这里。我知道这与您到底要问什么无关,但是它可以帮助您了解.make文件到底是做什么的。

因此,从整个任务来看,据我了解,使用.make文件无法使模块启用自动化。为此,您需要遵循其他方法。

希望该论坛网址可以为您提供帮助。 使用Bash脚本和Drush进行Drupal自动化

您需要编写一些bash脚本,在其中您将确切使用Drush命令。

drush en -y modulename

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.