vkovalc/module-phinx-migrations

这是一个 Magento 2 模块,它将 Phinx 数据库迁移集成,作为默认设置升级的替代方案,从而实现零停机部署。

安装次数: 9

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:magento2-module

3.0 2020-10-20 11:43 UTC

This package is auto-updated.

Last update: 2024-09-20 22:53:30 UTC


README

关于

MX_PhinxMigrations 模块将 Phinx 数据库迁移集成到 Magento 2,作为内置的 setup:upgrade 方法触发模式和数据变化的替代方案,从而实现零停机部署。

为什么?

此模块的目的是避免在 module.xml 文件中更改模块版本,以在 Magento 中触发数据库更改。当 Magento 自身启动时,它会验证 setup_module 数据库表中的所有模块版本是否与磁盘上的版本匹配。如果数据库中的模块版本与代码中的版本不匹配,则 Magento 将出错并显示类似以下内容:

1 个异常
异常 #0 (Magento\Framework\Exception\LocalizedException):请升级您的数据库:从 Magento 根目录运行 "bin/magento setup:upgrade"。
以下模块已过时
Acme_Foo 模式:当前版本 - 0.2.0,所需版本 - 0.3.0
Acme_Foo 数据:当前版本 - 0.2.0,所需版本 - 0.3.0

如果我们考虑以下高级部署过程,由于在步骤 2 和 3 之间某个时刻,即使只是极短的时间,代码和数据库版本之间将出现不同步,这将使得零停机部署成为不可能。

  1. 构建 Magento 容器
  2. 在部署新容器之前,在目标环境数据库上运行 setup:upgrade 进程
  3. 部署新容器

要求

该模块目前支持 Magento >= 2.1。

安装

将模块添加到 composer 文件的 require 部分

$ composer require mx/module-phinx-migrations

启用模块

$ bin/magento setup:upgrade
$ bin/magento c:c

我们可以通过运行状态命令来验证模块是否已启用

$ bin/magento module:status MX_PhinxMigrations

Phinx 配置文件

安装模块后,您需要在项目根目录中创建一个 phinx.php 文件。

示例可以在这里找到。不需要对此文件进行任何其他更改,但可以根据您的项目设置进行必要的编辑。

使用

迁移是扩展 phinx 迁移的定制类,并执行一些代码以更改数据库。迁移类文件可以位于以下任何 Magento 模块中(phinx 将在运行时扫描所有迁移文件夹):

  • src/*/*/etc/migrations
  • app/code/*/*/etc/migrations

创建迁移

phinx 可以为我们创建迁移。例如

bin/phinx create AddProductPimIdAttribute

然后它会询问我们希望将迁移文件添加到哪个模块

Which migrations path would you like to use?
  [0] src/Foo/Catalog/etc/migrations
  [1] src/Foo/Sales/etc/migrations
 >

当在所选目标创建迁移文件时,我们应该看到类似以下类的内容

<?php

use MX\PhinxMigrations\Migration;

class AddProductPimIdAttribute extends Migration
{
    /**
     * Upgrade the database.
     */
    public function up()
    {

    }

    /**
     * Rollback the database.
     */
    public function down()
    {

    }
}

在编写我们的迁移时,我们应该始终包含回滚代码,这样我们就可以轻松地撤销部署。

Magento 设置助手

在每个迁移中,我们都可以访问由 Magento 提供的 3 个不同的设置助手

  1. $this->schemaSetupMagento\Framework\Setup\SchemaSetupInterface 的实例)
  2. $this->dataSetupMagento\Framework\Setup\ModuleDataSetupInterface 的实例)
  3. $this->eavSetupMagento\Eav\Setup\EavSetup 的实例)

执行迁移

当你对你的迁移满意时,你可以按照以下方式执行它

bin/phinx migrate

回滚

如果你想撤销你的迁移,只需执行

bin/phinx rollback

限制

  1. 升级 Magento 本身仍会导致 Magento module.xml 文件中的版本变更,因此在这种情况下无法实现零停机部署。

常见问题/故障排除

问题:当我运行 bin/phinx create ... 时,它找不到任何迁移路径来创建迁移文件,为什么?

答案:为了创建迁移,phinx 将扫描上述提到的路径中的 migration 文件夹。请确保你在 Magento 模块的 etc 文件夹中至少创建一个 migration 文件夹,然后它应该按预期工作。