合并dev和live prestashop数据库

14

我需要在一个Prestashop 1.6网站上进行大量修改。

我已经创建了本地副本,并使用git跟踪文件系统变化。

然而,很多Prestashop的更改都存储在数据库中,特别是在我的情况下:

  • 安装和配置新模块
  • 卸载模块
  • 添加商店类别并更改层次结构
  • 更改模块位置
  • 以及通常修改模块出现在哪个钩子中。

在开发过程中,实时站点接收了许多新订单、客户、订阅等,因此数据库不同步了。

我曾通过转储和导入数据库中的特定表或使用框架内置的迁移功能来解决其他框架中类似的问题,但我找不到任何专门针对Prestashop的建议。

这应该如何处理?

考虑到开发站点可能比实时站点经历了更多种类的更改,我想知道是否将新订单等内容复制到开发站点,然后覆盖整个内容会更容易一些呢?

3个回答

3

我认为在PrestaShop中实现这一点是不可能的。你必须对PrestaShop数据库有深入的了解(即了解每个表和列),才能合并数据库。

也从来没有人建议这样做。

我建议你手动同步,因为这是一个非常危险的任务,你可能会失去所有在你的在线商店中的数据,这将更加痛苦。


呃,不是我想听到的,但还是谢谢。无论如何,在尝试合并之前,我都会将商店置于维护模式并备份文件和数据库,但是通过后台手动执行所有这些操作意味着商店将离线数小时,这将导致销售损失成本高昂。 - Steve

2
对于模块,信息存储在所有以modules开头的表中。 模块配置值存储在configurationconfiguration_lang中。当然,确保您也复制了自定义模块表。 商店类别信息在所有以category开头的表中。 模块钩子信息在所有以hook开头的表中。 但是,正如Raghubendra Singh在他的答案中所说,这是非常危险的任务,如果您真的想这样做,我建议您创建另一个当前现场站点的本地副本,并首先在两个本地副本之间尝试该过程,并确保一切都正确无误。

好的,这很有前途,我可能可以写一个小心谨慎的本地测试bash脚本。它可能需要比仅在后台进行更改更多的开发人员时间,但减少的停机时间很可能会弥补这一点,即使不是在第一次实例中,它也应该最终为自己付款。而且不必在凌晨3点工作也是一个加分项! - Steve

0

我可以告诉你我的更新Prestashop和日常使用的经验。

对于日常工作(修复错误或添加功能),我直接在phpmyadmin中更改数据库。我在镜像安装中测试所有内容,将更改复制到生产站点并应用mysql更改。

我们只推出了2-3个新的主要版本的网站(每两年一次左右),并等待稳定版本的Prestashop,即使1.7现在也有一些重大错误(其中之一是翻译,不确定在1.7.1中是否已完全修复)。 最后一个版本进展顺利,我们修改了主题以满足我们客户的需求,为其添加了一堆新功能等等...当启动时间到来时,我只分析了相关表格中的差异,并将数据从旧数据库复制到新数据库,包括添加的字段和更改的默认值等,使用ssh访问,因为它们都在同一台服务器上。

顺便提一下,我们需要的旧表格与地址、承运人、购物车、类别、客户、交付、特征、组、图像(但不包括图像类型)、制造商、订单、产品、范围、特定价格、可用库存、供应商、税收、税收规则、愿望清单、区域、国家、州、员工、个人资料等相关。其他如模块、配置、钩子等并不重要,因为这是一个全新的主题。

我一直想做一些能够同步开发版本和生产版本数据库的东西。但是由于我们不做很多重大更改,而且对于小的更改,我们尝试将更改保留在文件中,直到应用它(我知道这不是最专业的方法)。有时,在这些重大版本更改中,Prestashop 做事情的新方式可能有所改变。我记得最后一次是在 1.6.x 版本中添加了访问标识符,而在 1.5 中没有,完成一切后,我可以登录到后台,但其他工作人员却不能,因为它已经改变了访问权限控制方式,而由于我是超级管理员,所以我没有受到影响。还有一个不立即执行的原因是 Prestashop 开始使用 Symfony,并且我认为将来会更多地使用 Symfony,从而影响未来的做事方式。因此,现在的解决方案在未来可能行不通。

我们还可以使用模块中的升级功能。虽然从未尝试过,但它可以自动应用更新到数据库和其他方面。看起来很有前途,但不知道它是通过推送运行,还是只在模块升级时运行。总之,我将在某一天测试它。

这不是提供解决方案的回复,但我对其中的一个解决方案很感兴趣,如果没有其他解决方案,我也愿意尝试自己去解决。有一种能够直接推送而无需手动更改数据库内容的方式将是非常有趣的。


除非该模块在Prestashop Addons上,否则升级将在加载模块列表页面时立即运行。您还需要修改所有原始安装SQL代码/文件以反映更改,因为升级脚本仅会运行一次,即如果您重新安装模块,则升级脚本将不会运行。 - TheDrot
知道了这件事很好。也许推/拉操作可以在每个模块上触发升级检查。重新安装时,升级会自动完成。在安装时,我们需要改变代码来创建表以反映最新结构。 - sadlyblue
那只是理论。 - Wolfack
我不明白。你能详细说明一下吗? - sadlyblue
@ sadlyblue 当你的回答下有两个以上不同的人发表评论时,你需要使用 @用户名,这样他就会收到有关你的评论的通知。 - TheDrot

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