定制 nsedenkov/sprint.migration 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

nsedenkov/sprint.migration

Composer 安装命令:

composer require nsedenkov/sprint.migration

包简介

migration module for 1C-Bitrix

README 文档

README

Установка через composer

Пример вашего composer.json с установкой модуля в local/modules/

{
  "extra": {
    "installer-paths": {
      "local/modules/{$name}/": ["type:bitrix-module"]
    }
  },
  "require": {
    "andreyryabin/sprint.migration": "dev-master"
  },
}

Консоль

Создаем скрипт migrate.php для запуска миграций через консоль

его содержимое:

#!/usr/bin/env php
<?php

require_once realpath(__DIR__) . '/local/modules/sprint.migration/tools/migrate.php';

Примеры команд

  • php migrate.php add (создать новую миграцию)
  • php migrate.php ls --search=text (список миграций отфильтрованных по названию и описанию)
  • php migrate.php up (накатить все миграции)
  • php migrate.php up (накатить выбранную миграцию)
  • php migrate.php mark --as=installed (отметить миграцию как установленную не выполняя ее)
  • php migrate.php mark unknown --as=new (отметить все неизвестные миграции как новые, фактически удаление их из бд)

Все команды: https://github.com/andreyryabin/sprint.migration/blob/master/commands.txt

Пример файла миграции

/bitrix/php_interface/migrations/Version20150520000001.php

<?php
namespace Sprint\Migration;

class Version20150520000001 extends Version {

    protected $description = "";

    public function up(){
        //
    }

    public function down(){
        //
    }
}

в нем необходимо реализовать 2 метода up и down, которые запускаются при установке и откате миграции, например создание инфоблоков или какое либо другое изменение, которое должны получить все копии проекта.

Все примеры: https://github.com/andreyryabin/sprint.migration/tree/master/examples

Состояния миграций

  • New Новая миграция (только файл)
  • Installed Установленная миграция (файл + запись об установке)
  • Unknown Неизвестная миграция (только запись об установке)

Сообщения выполняющихся миграций

  • Version0000 (up) success Установка миграции прошла успешно
  • Version0000 (down) success Откат миграции прошел успешно
  • Version0000 (down) error: (text) Откат миграции не произошел из-за ошибки (текст ошибки)

Конфиги модуля

Основной (по умолчанию) /local/php_interface/migrations.cfg.php или /bitrix/php_interface/migrations.cfg.php

Дополнительные /local/php_interface/migrations.{NAME}.php или /bitrix/php_interface/migrations.{NAME}.php

<?php return array (
  'title' => '',
  'migration_dir' => '',
  'migration_table' => '',
  'migration_extend_class' => '',
  'version_prefix' => '',
  'tracker_task_url' => '',
  'stop_on_errors' => false,
  'show_admin_interface' => true,
  'console_user' => 'admin',
  'version_builders' => array(),
  'version_filter' => array(),
);

title - название конфига

migration_dir - директория для миграций (относительно DOC_ROOT), по умолчанию: /local/php_interface/migrations или /bitrix/php_interface/migrations

migration_table - таблица в бд с миграциями, по умолчанию sprint_migration_versions

migration_extend_class - класс, от которого наследуются миграции, по умолчанию Version (ваш класс должен наследоваться от Version)

tracker_task_url - Шаблон ссылки на задачу в трекере, в описании миграции можно указать номер задачи, например #12345, а в шаблоне должна быть конструкция $1, например http://www.redmine.org/issues/$1/, работает только в админке

version_prefix - Заголовок класса миграции, по умолчанию Version (полное имя класса состоит из заголовка и даты)

version_builders - Конструкторы (скрипты позволяющие выполнить какую либо задачу)

stop_on_errors - Останавливать выполнение миграций при появлении ошибок, варианты значений: true | false, по умолчанию false (не останавливать)

show_admin_interface - Показывать сервис миграций в админке, варианты значений: true | false, по умолчанию true (показывать)

console_user - Пользователь, от которого запускаются миграции в консоли, варианты значений: admin | login:userlogin | false, по умолчанию admin (запускать от админа)

version_filter - Массив, по которому будет фильтроваться и выполняться список миграций

Ни один из параметров не является обязательным.

При указании в конфиге несуществующей директорий для миграций (migration_dir) или таблицы в бд (migration_table) модуль создаст их.

Текущий конфиг помечается звездочкой * как в админке, в блоке конфигов, так и в консоли (команда config).

Переключить конфиг в админке можно нажав кнопку "переключить" напротив нужного конфига В консоли - используя параметр --config={NAME} к любой команде

Примеры:

  • php migrate.php ls --config=release001 (переключить конфиг на release001 и посмотреть список миграций)
  • php migrate.php up --config=release002 (переключить конфиг на release002 и накатить все миграции)

Модуль запомнит выбранный конфиг после переключения

Пример фильтрации списка миграций

Создайте конфиг и задайте параметры для фильтрации

<?php

$config = [
    'migration_dir' => '/migrations/',
];

if (\MyProject::IsDev()){
    $config['version_filter'] = [
        'env' => 'dev',
    ];
}

return $config;

Укажите этот фильтр у нужных миграций в свойстве $versionFilter

<?php

namespace Sprint\Migration;


class Version20171219185225 extends Version
{

    protected $description = "";

    protected $versionFilter = [
        'env' => 'dev',
    ];

}

И при просмотре списка миграций или установке\откату всех сразу выборка будет производиться только по вашему фильтру

Такого же результата можно добиться определив метод isVersionEnabled() в коде миграции, метод должен вернуть true или false в зависимости от какого-либо условия и миграция появится или пропадет из списка миграций

<?php

namespace Sprint\Migration;

class Version20171219185225 extends Version
{

    protected $description = "";

    public function isVersionEnabled()
    {
        return false;
    }

}

Пример создания конструктора миграции

Создайте класс-конструктор и объявите его в конфиге

<?php return array (
  'version_builders' => array(
    'MyVersion' => '\MyNamespace\MyVersion',
  ),
);

Ваш класс должен наследоваться от Sprint\Migration\AbstractBuilder

Реализуйте алгоритм создания миграции по аналогии

с конструктором /modules/sprint.migration/classes/Sprint/Migration/Builders/IblockExport.php

и шаблоном для него /modules/sprint.migration/templates/IblockExport.php

Пример создания миграции, которая наследуется от вашего класса

Укажите ваш класс в конфиге

<?php return array (
	'migration_extend_class' => '\Acme\MyVersion',
    //'migration_extend_class' => '\Acme\MyVersion as MyVersion',
);

Создайте этот класс

<?php
namespace Acme;
use \Sprint\Migration\Version;

class MyVersion extends Version
{
    // ваш код
}

Создайте миграцю migrate.php add, результат:

<?php

namespace Sprint\Migration;
use \Acme\MyVersion as MyVersion;

class Version20151113185212 extends MyVersion {

    protected $description = "";

    public function up(){
        //
    }

    public function down(){
        //
    }

}

Информация для разработчиков

Использовать какие-либо внутренние классы модуля не рекомендуется.

Совместимость от версии к версии модуля гарантируется для:

  • методов класса Version (который наследуют ваши миграции)
  • методов в хелперах (подключаются в классе миграции)
  • консольных команд описанных в commands.txt
  • конфигах migrations.{NAME}.php

Миграция не выполняется если в методах up() или down() вызывается return false или произошло исключение, в остальных случаях миграция выполняется успешно

Миграции при установке всех сразу выполняются от более старых к новым, при откате наоборот - от более новых к старым

При установке\откате всех миграций сразу, в случае если одну из миграций не удается выполнить, она пропускается и выполняются следующие миграции после нее, это поведение можно отрегулировать параметром в конфиге stop_on_errors = true , при таком варианте выполнение миграций остановится на миграции с ошибкой.

Код миграций должен быть независимым друг от друга, например если в одной миграции создается инфоблок, то в другой, перед тем как добавить какое-либо свойство, необходимо проверить существование этого инфоблока.

Такие методы есть в Sprint\Migration\Helpers\IblockHelper, например addIblockIfNotExists, addPropertyIfNotExists

При работе из консоли можно указать пользователя, от которого будут запускаться миграции, это регулируется параметром в конфиге console_user, с вариантами значений: admin - авторизоваться под первым найденным админом (по умолчанию) login:userlogin - авторизоваться под логином userlogin false - не авторизовываться

Скриншоты

админка

nsedenkov/sprint.migration 适用场景与选型建议

nsedenkov/sprint.migration 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 14 次下载、GitHub Stars 达 0, 最近一次更新时间为 2018 年 12 月 21 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「migration」 「bitrix」 「sprint」 「andrey」 「ryabin」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 nsedenkov/sprint.migration 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 nsedenkov/sprint.migration 我们能提供哪些服务?
定制开发 / 二次开发

基于 nsedenkov/sprint.migration 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 14
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 8
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 1
  • Forks: 62
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2018-12-21