【问题标题】:How can I deploy changes to my drupal gear when the mysql DB holds customer data?当 mysql 数据库保存客户数据时,如何将更改部署到我的 drupal 设备?
【发布时间】:2014-09-30 14:53:13
【问题描述】:
我的 openshift drupal 设备有实时客户数据,但我的测试站点只有测试数据。当我开发新功能、修复错误、添加视图或更改内容类型中的字段(在测试站点上)时,它将更改 mysql 数据库。如何在不清除保存客户数据的表格的情况下将这些更改上传到设备?到目前为止,我不必编写任何自定义代码,只需添加模块并配置它们。所以我宁愿避免使用 PHP 解决方案。谢谢。
【问题讨论】:
标签:
mysql
drupal
sync
openshift
【解决方案1】:
您要么必须编写某种迁移脚本,要么必须手动对您在开发实例上所做的生产实例进行更改。执行“git push”不应该修改您的生产数据库,它应该只上传您的代码更改。
【解决方案2】:
developercorey 已经搞定了。
不过,稍微扩展一下,这与 Openshift 几乎没有关系,而与 Drupal 的一切都有关(无论您在什么服务上运行 Drupal,您通常都会遇到这种情况)。例如,您也很难将实时数据带到您的测试站点。
问题在于 Drupal 在分离数据库中的配置 和内容 方面做得很差。 Drupal 8's CMI 在大多数情况下应该可以解决这个问题,但是对于没有运行 Drupal 8 的站点,实际上只有两个选项:
- 在远程站点上手动跟踪和重新创建开发数据库更改,并使用 git 管理新模块、库、主题等的添加;这既乏味又容易出错。
- 使用Features module 将所有重要配置保存在代码中。这种方式相当可靠,但功能有时会很挑剔。
功能工作流程
注意事项
- 您不必编写代码即可使用功能,但它确实有帮助
- 功能只能帮助您处理可导出的 Drupal 部分——有些部分不能导出
无论如何,要使用功能来管理更改,您需要遵循类似以下的过程。出于本文的目的,我将想象您的功能仅包含一个视图而没有其他任何内容。对于更复杂的特性,原则是相同的,但讨论一个非常复杂的特性会使这个时间过长。我也不会详细说明在 UI 中单击哪个链接和按下哪个按钮——在上面链接的“功能”项目页面上有这类事情的文档。我还将假设在初始创建功能后,您将在命令行上使用drush 和git 进行管理。
在开发网站上创建功能
- 备份您的数据库:)
- 在 Drupal 管理区域中,创建一个只包含一个视图的新功能
- 导出功能/将其写入文件系统
- 从视图 UI 中删除视图
- 使用
drush en启用该功能
- 使用
git添加、提交和推送新功能
在生产环境中部署该功能
- 备份您的数据库:)
- 使用
git pull获取新功能
- 从上面重复步骤 4-5
在开发网站上修改功能
假设您的视图现在需要更改。您可以按照以下步骤通过现有功能将这些更改转换为代码:
- 备份您的数据库:)
- 在视图 UI 中更改视图
- 在终端中,导航到您的功能目录
- 运行
drush fu
- 运行
git status(这应该会显示您的功能是否有任何变化)
- 使用
git 提交并推送您的代码更改
在开发站点上部署更改的功能
- 备份您的数据库:)
- 使用
git pull 获取对功能的更改
- 在功能 UI 中导航到您的功能
-
还原功能(这将更改数据库中的功能设置以匹配代码中的内容)
就是这样。
【解决方案3】:
因为你没有提到 Drupal 版本,但是
您可以使用 Drupal 8 中提供的精彩功能,即 Synchronize
网址:管理员/配置/开发/配置
使用此功能,您将能够导出视图、内容类型及其字段,并通过 GIT 或任何其他版本控制将其导入另一个服务器和代码。
注意:确保两个实例的 uuid 相同(源和目标)