如何在Git中管理Drupal网站

5

我有点迷茫,我的一位开发同事正在制作一个Drupal网站,该网站包括特殊页面、自定义Logo、自定义层次结构等。他的工作散布在数据库表中(看起来像是CCK创建的表)、数据库行中(文本、图像链接等)、静态文件中(图片、PDF文件等),也可能包含一些PHP(自定义模块)。

我的问题是如何将他的工作放到git代码库中,并能够以一致的方式部署到各个服务器上,就像我处理传统开发工作一样(比如J2EE)。我的限制之一是避免使用原始SQL,因为我们可能在各种关系型数据库管理系统(RDBMS)上部署相同的代码。但如果必须使用,我会放宽这个限制。

我找不到可以立即实现这一点的模块,你在Drupal网站上是否有任何我可能忽略的提示呢?

感谢您的帮助,

Nicolas。

3个回答

4

谢谢,这真的很有趣,而且因为这样的名字,我之前没有注意到它。我今天会尝试一下。 - nraynaud
很遗憾,Features不嵌入数据库内容。对于我们手头的问题没有帮助,但它将在其他开发方面帮助我们,谢谢。 - nraynaud
“数据库内容”是指节点的内容吗?(特征导出的配置默认也存储在数据库中。) - ashtonium
不确定为什么需要将节点内容存储在Git中,Drupal有自己的节点修订系统。但是有许多节点导出/导入模块可能适合您的需求。 - ashtonium
就我个人而言,在版本控制系统中,有趣的事情在于每个工件都以相同的节奏进行版本控制并集中管理。 我希望能够通过一次点击提取与裸机安装不同的所有内容,并将其放入驱动器中(理想情况下是一个文件集合,以便我们可以对其进行差异比较),然后再通过另一次点击将其重新导入到裸机安装中。 - nraynaud

4
使用Context结合Features非常强大。Context可以让你为网站创建一个“部分”。最好通过一个例子来说明:
假设我们将“Forum”上下文定义为任何具有forums/*的url。使用Context,我们可以说:“只有在‘Forums’上下文中时,我想在右侧边栏中显示这三个视图。”
现在,使用Features,我们可以创建由上下文定义的“模块”。因此,我们将得到一个名为“youSite_forums”的模块,其中包括在您的Forums上下文中定义的所有视图、块等。它还将确定正确的依赖关系,以及上下文中使用的内容类型。所有这些都将被打包成一个很好的模块。
至于像节点之类的内容的版本控制,您可以使用Node Export,或者仅使用Backup and Migrate进行数据库转储。我们偶尔会使用这些工具,但我们从不将每个节点的版本都存储在SVN中。
链接: Features Context Backup and Migrate

1
我完全同意Erik的看法。为了更加控制,我还建议考虑Strongarm模块。如果你正在寻求有关管理部署流程的更多信息,可以在http://www.opc.com.au/web-development/drupal-release-management-drush-and-git找到更详细的描述。 - Horatio Alderaan

2
您可能还需要了解服务和部署方面的内容。部署使用服务 xmlrpc 服务器来传输大多数 Drupal 数据从一个站点到另一个站点,或者在您的情况下,从开发人员安装到暂存安装。

http://drupal.org/project/Services

http://drupal.org/project/deploy

至于“以一致的方式在各种服务器上部署它”的方法,请查看 Capistrano 和 railsless-deploy。设置一些任务非常简单,我使用它来部署所有我的 Drupal 站点。

http://www.capify.org/index.php/Capistrano

http://github.com/leehambley/railsless-deploy


我的设置的重点是开发环境和暂存环境之间没有直接连接,它们之间应该通过Git传递。这样我就可以回到过去,对于文件、节点和主题等都有相同的“版本节奏”。我的整个“应用程序”远远超出了Drupal模块的范畴,而且我并不完全信任Drupal,不足以成为我们产品的主要组成部分。我只是将其“集成”进来。 - nraynaud
最好还是按照上下文和功能来处理。至少你可以将功能存储在代码库中,随时启用。 - unn
尽管这在Drupal中总是会遇到的问题...你有所有这些视图、块存储在数据库中,但如何始终将它们从一个地方传输到另一个地方呢? - unn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接