vkovalc / module-phinx-migrations
这是一个 Magento 2 模块,它将 Phinx 数据库迁移集成,作为默认设置升级的替代方案,从而实现零停机部署。
Requires
- php: >=7.0
- robmorgan/phinx: ^0.9.2
- zendframework/zend-http: ^2.0
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 之间某个时刻,即使只是极短的时间,代码和数据库版本之间将出现不同步,这将使得零停机部署成为不可能。
- 构建 Magento 容器
- 在部署新容器之前,在目标环境数据库上运行
setup:upgrade
进程 - 部署新容器
要求
该模块目前支持 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 个不同的设置助手
$this->schemaSetup
(Magento\Framework\Setup\SchemaSetupInterface
的实例)$this->dataSetup
(Magento\Framework\Setup\ModuleDataSetupInterface
的实例)$this->eavSetup
(Magento\Eav\Setup\EavSetup
的实例)
执行迁移
当你对你的迁移满意时,你可以按照以下方式执行它
bin/phinx migrate
回滚
如果你想撤销你的迁移,只需执行
bin/phinx rollback
限制
- 升级 Magento 本身仍会导致 Magento
module.xml
文件中的版本变更,因此在这种情况下无法实现零停机部署。
常见问题/故障排除
问题:当我运行 bin/phinx create ...
时,它找不到任何迁移路径来创建迁移文件,为什么?
答案:为了创建迁移,phinx
将扫描上述提到的路径中的 migration
文件夹。请确保你在 Magento 模块的 etc
文件夹中至少创建一个 migration
文件夹,然后它应该按预期工作。