4

我使用 git 进行版本控制。我有一个开发、登台和生产环境。当我完成开发时,我会推动分期以供客户审查。获得批准后,我会将更改从暂存阶段推送到生产阶段。只要没有数据库更改,它就可以正常工作。如果我在本地开发中通过 Magento connect 安装模块并进行数据库修改,会发生什么情况。

由于生产服务器一直在变化,我如何将这些更改推送到生产服务器?

编辑:

我写了两个shell脚本。一种将生产数据库下拉到我的开发服务器,用开发 url 替换基本 url 并相应地更新我的开发数据库。它还留下了生产 sql 转储以添加到我的 git 存储库中。我不确定将原始转储保留在源代码控制中是否有益,但我会尝试一下。第二个脚本将开发数据库移至暂存状态,并基本上执行与第一个脚本相同的操作。

现在,当需要转移到生产环境时,我将更新的生产 repo 拉入生产服务器并允许 magento 执行此操作。我最近也开始使用 SQLYog,它有一个数据库比较向导,可以让我了解我的开发和生产数据库的差异,并允许我有选择地合并更改。它总是会创建一个迁移脚本,我也将它添加到源代码管理中。如果出现任何问题,我可以运行比较以查看是否遗漏了任何内容。

对你们来说,这听起来像是一个不错的工作流程吗?

4

3 回答 3

8

这是开发人员的常见情况。修改代码和模式要容易得多,并且当有一个被彻底理解并且对 UI 没有太多灵活性的小代码库时,可以确保一切都很好。当然,Magento 并非如此,它可能很难用于自动化测试和持续集成方案。也就是说,您可以依赖一些已知的、可测试的行为。

概述

在处理与生产合并的本地开发时,必须确保在更新文件系统时也会应用与新功能或更改功能相关的架构和数据更改。这实际上是 Magento 本身的工作方式。模块配置文件可以提供版本号并且可以配置设置资源。此信息用于输入模式和数据修改工作流程,从而将版本信息添加到数据库中。正是文件指定的版本号和数据库注册的版本号之间的一致性,一个人/系统可以在给定文件的情况下推断数据库处于适当的状态。

这意味着当新的/更新的模块文件合并到生产中并且满足必要的条件(例如配置缓存无效等)时,应该进行数据库升级。您(适当的)担心的是,此过程可能会因远程服务器级别差异、远程数据差异等而中断。如果没有严格监管的集成测试过程,就会产生一些开销。

攻击计划:选择正确的策略

该领域的基本活动是评估模块对数据库的影响领域。对于任何值得安装的模块,这应该很简单;检查以下任何一项:

  1. 一个system.xml文件
  2. sql数据文件夹中存在安装/升级脚本
  3. 存在自定义设置资源类(在global/resourcesxpath 下配置)
  4. 适当的配置 XML(模块配置节点中的版本号和global/resourcesxpath 下的设置资源)

对于 1,只需查看结构并知道它对数据库的影响将仅限于core_config_data表,并且通常只有在管理员通过 GUI 保存值后(注意下面的 1. 也适用)。

对于 2 和 3,查看设置为运行的脚本。这些可以分为三个一般区域: 1. 配置设置 - 查找setConfigData()deleteConfigData()调用 2. 表格添加和编辑(新表格、添加列等) 3. EAV 相关的更改和添加;寻找 EAV 设置资源 4. 非 EAV 数据更改:安装新数据或修改现有数据

这是感觉和直觉的问题,但衡量对数据库的影响程度将使您能够确定是否应该将生产数据克隆到本地开发并在本地测试设置工作流程,验证它是否正常工作,然后推送到生产并重新-检查(总是备份!)。如果更改范围很广,最好使站点脱机,这样可以确保在升级失败后需要恢复时不会丢失订单或客户数据。

于 2012-09-09T11:14:18.190 回答
2

您通常不想从 dev > prod 推送数据库中包含的数据。您的架构定义应该包含在 Magento sql 安装脚本中。如果您确实有想要推送到 prod 的实际新数据,则必须根据具体情况进行操作。在 prod 上运行实际案例之前,您很可能会从 prod > dev 下拉以测试数据和配置。

于 2012-10-30T14:13:51.747 回答
-3

情况1:

如果您的生产服务器具有与本地相同的数据 (DB),则只需将数据库和文件复制到生产服务器并执行以下操作:

1)删除文件夹/var的内容

2) 更改文件/app/etc/local.xml 的值在那里您可以找到您的连接字符串数据(数据库用户、主机和名称)。

3) 上传数据库后,您需要进行一些更改。

运行此查询:

SELECT * FROM core_config_data WHERE path = 'web/unsecure/base_url' OR path = 'web/secure/base_url';

你会得到 2 行。通过运行此查询更新这些行

UPDATE core_config_data SET value = 'YOUR_NEW_LIVE_URL' WHERE path LIKE 'web/%/base_url';

就这样。

案例 - 2:

如果您不想在生产中更改数据库数据,则需要通过 megento 安装模块直接连接到生产服务器。您可以更新您在本地更改的文件。

于 2012-09-08T11:34:11.913 回答