首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将内容从生产服务器转移到dev服务器的最佳实践

将内容从生产服务器转移到dev服务器的最佳实践
EN

Drupal用户
提问于 2016-08-05 11:15:47
回答 3查看 2.9K关注 0票数 1

我已经使用GIT来构建我的Drupal 7站点(遵循这些准则)。为了在更新站点之前向下游移动更改的内容--为了不用旧内容覆盖新内容--我想找出最佳做法是什么。我正在考虑使用d2d迁移模块,但也许有更多的已经建立并得到验证的方法?

专业人士是怎么做到的?

EN

回答 3

Drupal用户

发布于 2016-08-08 10:44:20

在不丢失数据的情况下修改现有项目是一个常见的需求。

使用特性

我知道的最佳实践之一是使用特征模块来交付您在生产服务器上所做的所有修改。特性允许您创建包含内容类型结构、视图定义等更多内容的自定义模块。

您可能还需要使用强臂模块来检索某些部分的设置变量(例如模块配置)。

这些模块确实有助于在生产站点上部署修改,甚至使用git。您可以很容易地找到一些关于使用特性的好教程。

唯一需要知道的重要部分是,当您开始使用功能时,很难停止使用它。因为它将创建和实现包含网站所有规范(内容类型、字段、视图、页面,.)的自定义模块。如果你禁用它/他们,一切都会消失。

出口修改

如果项目上的修改不会变得复杂(主要是内容类型、结构和视图),则可以使用某些模块(例如视图)提供的导出/导入可能性。

还可以将捆绑复制模块用于节点内容类型导出和导入部分。

硬道

之后,我有时会用一种很难的方法。只有在不更改现有内容类型的字段设置以及只添加一些字段(字段和内容类型)时,它才能工作。

您可以在开发服务器数据库中复制生产服务器的内容表。您必须清楚地了解所有内容类型,特别是其中使用的字段(特别是字段的机器名称)。

=>将丢失开发服务器的所有新节点和修改节点。然后,不要犹豫先备份您的数据库。

如果在这种情况下,可以从生产服务器复制所有内容表:

  • 节点:包含所有内容信息的基节点表。
  • node_revision :如果你想要得到修订的信息
  • 对于每个内容类型字段:

  • url_alias :内容的自定义路径(如果需要)
  • 分类法表:如果您需要,但它可能很棘手。
  • 用户表:用户和users_roles (如果需要)
票数 1
EN

Drupal用户

发布于 2016-08-05 11:58:47

由于D7将其配置保留在sql中,当您将sql-同步从产品到dev (如下面所述)时,对dev所做的任何配置更改都将被覆盖。(在Drupal 8中已经解决了这个问题,在Drupal 8中,配置与内容分开存储。)

有时建议使用特性将对dev进行的数据库配置更改推送到sql数据库之外的文件,然后将这些文件同步到生产中,然后重新导入数据库。不幸的是,对已经存在的站点进行改造以使用功能进行配置并不容易,而且并非所有模块都支持功能。虽然有些人报告说,他们在这方面取得了成功,但我一直无法使它为我的网站工作-但YMMV。

相反,我这样做的方法是记录一个相当详细的日记,记录我对开发站点所做的所有配置更改和添加。在sql-sync之后,我使用此日记作为脚本,并手动将这些配置更改添加回dev。

由于您在这两台服务器上运行相同的代码基础,因此不需要使用d2d迁移或任何其他模块来迁移sql数据库--标准的shell工具就可以了。

考虑到保存Drupal的数据库名为"drupal7":

我首先清除所有缓存(以减小转储的大小),然后在生产服务器上对"drupal7“DB进行完全转储:

代码语言:javascript
复制
drush cc all
mysqldump -u root -p drupal7 > productionYYMMDD.sql

然后,我将转储文件(使用scp)从产品转移到dev,并在dev服务器上插入完整的转储:

代码语言:javascript
复制
mysql -u root -p drupal7 < productionYYMMDD.sql

在手动添加配置更改(使用日记作为脚本)之后,dev现在可以部署了。

Git在这里不相关,因为它用于同步代码,而不是内容。

票数 0
EN

Drupal用户

发布于 2016-08-15 14:23:27

谢谢你的建议!

如果其他人正在寻找另一种解决方案,我决定把这个答案贴在我自己的问题上。当生产站点需要以更改的主题、新功能、自定义模块、新代码等更新时,我暂时做以下工作:

  1. 使用Putty在远程生产服务器上登录,并使用带有Drush (>drush ne-export =mycontent_ type -file=transfer/mycontent_type. the )的节点导出每个内容类型的所有节点。
  2. 导出每个内容类型的所有节点后,我使用FileZilla将传输文件夹与所有(8)导出文件传输到dev站点。
  3. 在dev站点上,我使用Drush导入每个内容类型的所有节点。这三个步骤大约需要10-15分钟,大约有1000个节点和8种内容类型。
  4. 生产站点和开发站点现在具有完全相同的内容。如果需要的话,我也会将图像从生产站点/默认/文件传输到开发端,这样就可以更容易地看到所有的内容都是相同的。
  5. 在dev站点上,我现在使用迁移和备份来备份数据库。在我的生产分支中,我添加、提交并将本地更改推送到我的GitHub回购中。
  6. 然后,我用Putty登录到我的分期站点,并将我的生产分支从Github拉出来。
  7. 在暂存站点上,我使用备份和迁移从步骤5恢复数据库备份。
  8. 如果一切看起来不错,我把生产现场的维护模式,并重复步骤6和7在那里。

通过这种方式,我将在开发端拥有一个新的实时内容副本(而且我可以随时轻松地将内容向下移动)。

至于所提供的答案,我一定会探讨功能模块和其他可能的建议。再次感谢。如果你发现了我目前方法的缺陷,请告诉我。

也许我应该提一下,只有少数几个人被允许添加新的内容或在直播网站上进行更改。这意味着我可以确保在更新过程中不会进行任何新的内容更改。

票数 0
EN
页面原文内容由Drupal提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://drupal.stackexchange.com/questions/210560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档