Giter Site home page Giter Site logo

andreyryabin / sprint.migration Goto Github PK

View Code? Open in Web Editor NEW
166.0 166.0 55.0 1.81 MB

Миграции для разработчиков (1С-Битрикс)

Home Page: http://marketplace.1c-bitrix.ru/solutions/sprint.migration/

License: MIT License

PHP 97.47% Ruby 0.02% CSS 0.73% JavaScript 1.74% Hack 0.04%

sprint.migration's People

Contributors

a-batashev avatar aak74 avatar akellaweb avatar andreyryabin avatar anloc avatar arkharis avatar aslanator avatar defast avatar hustlahusky avatar ildarkhasanshin avatar konstantin-s avatar kryshtalovich avatar leonid-chernyavskiy avatar maxlyaptsev avatar nook-ru avatar sdklester avatar smilingcheater avatar stepanrodionov avatar w1cerg avatar webarchitect609 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sprint.migration's Issues

Эксепшен после установки

Привет! Поставил модуль, но сразу после установки админка начала кидаться эксепшенами...
Если нет времени, то я на досуге поковыряю и сделаю пулл-реквест

2018-11-23 00:15:09 - Host: cvetochka.ru - UNCAUGHT_EXCEPTION - [Error]
Class 'Sprint\Migration\Locale' not found (0)
/home/cvetok/public_html/bitrix/modules/sprint.migration/locale/ru.php:3
#0: include
	/home/cvetok/public_html/bitrix/modules/sprint.migration/include.php:5
#1: include_once(string)
	/home/cvetok/public_html/bitrix/modules/main/lib/loader.php:109
#2: Bitrix\Main\Loader::includeModuleInternal(string)
	/home/cvetok/public_html/bitrix/modules/main/lib/loader.php:96
#3: Bitrix\Main\Loader::includeModule(string)
	/home/cvetok/public_html/local/php_interface/init.php:36
#4: {closure}(string)

#5: spl_autoload_call(string)
	/home/cvetok/public_html/bitrix/modules/sprint.migration/locale/ru.php:3
#6: include(string)
	/home/cvetok/public_html/bitrix/modules/sprint.migration/install/index.php:25
#7: sprint_migration->sprint_migration()
	/home/cvetok/public_html/bitrix/modules/main/classes/general/update_client_partner.php:2477
#8: CUpdateClientPartner::__GetModuleInfo(string)
	/home/cvetok/public_html/bitrix/modules/main/classes/general/update_client_partner.php:1051
#9: CUpdateClientPartner::GetCurrentModules(NULL)
	/home/cvetok/public_html/bitrix/modules/main/classes/general/update_client_partner.php:526
#10: CUpdateClientPartner::GetRequestedModules(string)
	/home/cvetok/public_html/bitrix/modules/main/admin/update_system_partner.php:31
#11: require_once(string)
	/home/cvetok/public_html/bitrix/admin/update_system_partner.php:2

"Неверный тип события" при миграции форм

После расхождения прода и теста по почтовым шаблонам (видимо), при миграции на прод столкнулся с ошибкой "Неверный тип события" при миграции одной из форм.

Вылечилось путём комментирования arMAIL_TEMPLATE с ID почтовых шаблонов в параметрах миграции. Форма смигрировалась, нужные почтовые шаблоны подцепились, т.к. MAIL_EVENT_TYPE у них символьный. Только, разумеется, без галочек использования.

Может сделать выгрузку почтовых шаблонов опциональной, по галочке?

Создание миграций по событиям

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

автор Роман Гонюков

Добавить в миграции свойств перенос параметров отображения для списка и детальной

При использовании миграции для переноса свойств инфоблоков, не переносятся параметры для отображения.

image

Важно: не у всех свойств есть строка "Значение добавляется в корзину", это стоит учесть.

Критическая ошибка в административном интерфейсе модуля

BX Версия 21.400.100 / Редакция "Старт"
Версия модуля: 4.0.0

После установки ошибка

Error Object
(
    [message:protected] => Call to a member function getGroup() on bool
    [string:Error:private] => 
    [code:protected] => 0
    [file:protected] => .../public_html/local/modules/sprint.migration/admin/includes/builder_group.php
    [line:protected] => 19
)...

Причина в createBuilder, если не установлен модуль, в моем случает это формы, метод вернет false

/** @var  $builder AbstractBuilder */
$builder = new $class($this->getVersionConfig(), $name, $params);
if (!$builder->isEnabled()) {
       return false;
} 

получаем Call to a member function getGroup() on bool

Если кому критично, временное решение
Файл /sprint.migration/admin/includes/builder_group.php

/** @var $versionConfig VersionConfig */
$versionManager = new VersionManager($versionConfig);
$builderList = $versionConfig->getVal('version_builders', []);
$builderTree = [];
foreach ($builderList as $builderName => $builderClass) {
    $builder = $versionManager->createBuilder($builderName);
    if ($builder instanceof AbstractBuilder) {
        $builderGroup = $builder->getGroup();
        if (!isset($builderTree[$builderGroup])) {
            $builderTree[$builderGroup] = [];
        }

        $builderTree[$builderGroup][] = [
            'NAME'  => $builder->getName(),
            'TITLE' => $builder->getTitle(),
        ];
    }
}

Создание схем для кастомных таблиц

Наверное плохо искал в wiki, но сейчас очень очень потребовалось реализовать миграцию схем своих таблиц.
Прошу либо подсказать как сделать (если есть), либо подсказать где смотреть (кастомизирую и пришлю реквест).

Не генерируется миграция для ИБ

Если нет пользовательских свойств в ИБ и стоит галочка в группе настроек "Свойства инфоблока", то при попытке сгенерировать миграцию ничего не происходит, если убрать галочку, то все чудесно создается.

Миграции сайтов

Сделать миграцию для списка сайтов со всеми настройками (язык, домены, шаблоны), автор Игорь Долгополов

Миграция для списков

Отсутствует миграция для списков Bitrix24. При создании миграции инфоблока, который является списком, после переноса миграции в списке отсутствуют видимые поля.

Ошибка построение списка свойств инфоблока для миграций

Ошибка: IblockTrait::getIblockUid: Инфоблок не найден
Ошибка возникает когда в свойствах ИБ есть привязка к элементам(разделам) у ИБ которых нет символьного кода.
Но это не позволяет выбрать другие свойства для миграции. Что вызывает неудобство. Возможно есть смысл показывать такие свойства на следующем шаге просто disabled - но давать выбрать другие?

https://prnt.sc/13i68hb

проброс исключений

ты не рассматриваешь правку в свою библиотеку, которая бы позволяла получать более детальную информацию о возникшем исключении?

Проблема заключается в том, что существующий вывод крайне неинформативен и stacktrace отображается не по актуальному исключению, а по твоему исключению, выброшенному в ответ на "возмущение" кода миграции

в реальности мне приходится сидеть с дебагером, и ловить catch-хвост во внутренности твоего метода \Sprint\Migration\VersionManager::startMigration(), чтобы установить, где именно у меня сломано, и что там происходит

https://i.imgur.com/nsC5UJe.png

Можешь подсмотреть в методы моего трейта

\WebArch\LogTools\Traits\LogExceptionTrait::getExceptionAsString(Throwable $exception): string

и

\WebArch\LogTools\Traits\LogExceptionTrait::getContext(Throwable $exception): array

, где у меня универсальным и максимально похожим на стандартный PHP способ выводится вся правда об ошибке, даже если был задейстован механизм exception-chaining.

Проблема при переносе свойств инфоблока типа список

Переносил инфоблок. Много полей типа список. После переноса обнаружилось, что теряется первый вариант значений списка. То есть, в коде миграции, например, вот что:
'VALUES' => array ( array ( 'VALUE' => 'Кошка', 'DEF' => 'Y', 'SORT' => '500', 'XML_ID' => 'CAT', ), array ( 'VALUE' => 'Собака', 'DEF' => 'N', 'SORT' => '500', 'XML_ID' => 'DOG', ), ),

На выходе в свойство импортируется только значение "Собака". И так по всем подобным свойствам. Кроме того, что эти свойства список, они ещё и множественные, если это важно.

Выход с сообщением "Файл для переноса данных был создан в более ранней версии модуля"

Когда в CLI режиме мигратор обламывается с сообщением вида "Файл для переноса данных был создан в более ранней версии модуля" не указывается - в каком именно файле случилась такая беда, что крайне неудобно. Пришлось лезть в код IblockElementsImport и смотреть. Оказалось, - что неудивительно, - вся информация о файле есть. Если переписать выход как-то так:

            $this->exchangeEntity->exitWithMessage(
                Locale::getMessage('ERR_EXCHANGE_VERSION') . ': ' . $this->getExchangeFile()
            );
        }

то уже становится значительно лучше.

Upd. Тоже самое касается сообщений вида "IblockTrait::getIblockIdIfExists: Инфоблок не найден". Какой инфоблок? В каком файле? Нет ясности.

Попутно вопрос с этими версиями файлов. Кажется, такой подход (не в пределах мажорной версии хотя бы) излишне радикален. Насоздавал миграций сто штук на версии 3.19 (условно), живу и горя не знаю. Потом пусканул композер и прилетела версия 3.33. Неужто почти все мои миграции тут же протухают? Неужто надо лочить на определенную версию? Возможно, чего-то недопонял и это как-то настраивается?

P.S. Маленький апдейт: у меня почему-то сгенерировался xml файл без параметра exchangeVersion, потому и обламывалось. Добавил - стало OK. Вроде, генерил его через админку, но ....

Добавить возможность экспорта элементов инфоблоков стандартным механизмом Битрикс

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

Добавить возможность произвольной выборки элементов инфоблока в миграцию

Сейчас, закрывая задачу в Jira, я пишу туда все контентные действия в админке, чтобы после тестирования не вспоминать, что и где делалось. Это жутко неудобно, неизбежны потери и кривотолки. Необходимо дать возможность все действия в рамках одной задачи заталкивать по нескольким простым миграциям. Думаю, будет вполне достаточно сделать поле ввода для указания через запятую всех необходимых символьных или внешних кодов элементов.

Добавить информации в сообщение об ошибке "HlblockHelper::getHlblockUid: Highload-блок не найден"

Если свойство инфоблока некорректно настроено (свойство типа "справочник" содержит ссылку на несуществующий ХЛ-блок) - модуль при попытке создать/импортировать схему данных закономерно выдает ошибку. Но сам текст ошибки не содержит информации о том, какое свойство какого инфоблока ссылается "вникуда".
(в моем случае, дословно текст выглядел так: "HlblockHelper::getHlblockUid: Highload-блок не найден" )
Если добавить в сообщение информацию об инфоблоке и проблемном свойстве - это сильно поможет в поиске ошибок.

PS причем, некорректная ссылка на несуществующий инфоблок (а не хайлоад-блок) подобной ошибки не вызывает вообще.

не переносить свойства инфоблока

Артем Первушин ([email protected])
Увидел косяк в модуле: Если нет свойств у инфоблока, а галка тыкнута переносить свойства, то миграция не создается и ошибок не выводится. Надо не тыкать галку если нет свойств.

Некорректная работа модуля с символическими ссылками Windows

Ось: Windows
Сервер: OSPanel 5.2.2
Версия модуля: 3.10.1 (composer)

Сервер обращается к проекту через символическую ссылку (Junction связь)

Ошибка:

Can't create directory E:/OSPanel/domains/abc.localD:\OS Projects\domains\abc.local\local\php_interface\migrations.archive\

image

P.S. Причина по которой проект находится на другом диске - SSD. Сервер расположен на HDD.

Не перенеслись данные из свойства типа HTML/текст

Не перенеслись данные из свойства типа HTML/текст, хотя в xml данные есть.
Миграции выполнил на 2 серверах, оба раза данные в это поле не перенеслись.
Версия модуля: 3.25.1
PHP 7.4
mbstring.func_overload отключена

Кастумное именование свойств в списках ИБ

В методе: $helper->UserOptions()->saveElementGrid();
В элементе массива "custom_names" при указании ['PROPERTY_КОД' => 'Custom name'] не происходит автоматического преобразования "PROPERTY_КОД" в "PROPERTY_ИД" из-за чего не изменяется имя в колонке.

Не показывается человеческая ошибка при использовании \Sprint\Migration\Helpers\HlblockHelper::addHlblock

$this->throwException(__METHOD__, $result->getErrors());

Внутри Try вызывается исключение, которое отлавливается и повторно передается в обработчик исключений.

Для простого скрипта, вида:

public function up() {
    $helper = $this->getHelperManager();

    $helper->Hlblock()->saveHlblock([
        'NAME'       => 'ProductsAddress',
        'TABLE_NAME' => 'b_products_address',
        'LANG'       => [
            'ru' => [
                'NAME' => 'Расположение товаров в магазинах',
            ],
            'en' => [
                'NAME' => 'Products address',
            ],
            'ch' => [
                'NAME' => 'Products address',
            ],
        ],
    ]);
}

При наличии такой таблицы в базе получаем ошибку: "Version20191018205325 (up) error: HlblockHelper::addHlblock: HlblockHelper::addHlblock: Array"

Я временно у себя поправил так:

try {
    $result = HighloadBlockTable::add($fields);
    if ($result->isSuccess()) {
        $this->replaceHblockLangs($result->getId(), $lang);
        return $result->getId();
    }
} catch (Exception $e) {
    $this->throwException(__METHOD__, $e->getMessage());
}

if (!$result->isSuccess()) {
    $this->throwException(__METHOD__, implode(', ', $result->getErrorMessages()));
}

Дойдут руки если раньше, то попробую разобраться лучше и может PR сделаю. Сегодня некогда, сохранил чтобы не забыть.

создание миграции с заранее заданными параметрами

Добрый день!

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

чтобы на выходе получить что-то типа такого:

shell exec ('php bin/migrate.php run IblockBuilder - $migrationName -$migrationDesc -$iblockId, $propertyId');

ну и так далее.

Новая миграция не отображается в списке

ну что за дичь)
пофиксите пожалуйста
sprint.migration/admin/assets/script.js

кнопка "Создать миграцию" перезагружает страницу, миграция не появляется в списке, не находится при поиске.

какая версия предыдущего релиза? пропишу жестко, а то не тестируете...

При использовании симлинков не заводится

При структуре: sites/s1/ -> document-root. Симлинки - sites/s1/local -> /local к $values['migration_dir'] в versionconfig.php добавляется еще один document_root. Тут:

   if (empty($values['migration_dir'])) {
        $values['migration_dir'] = Module::getPhpInterfaceDir() . '/migrations';
    } elseif (empty($values['migration_dir_absolute'])) {

        //$values['migration_dir'] = Module::getDocRoot() . $values['migration_dir'];
        // $values['migration_dir'] = $values['migration_dir'];
    }

Помогает комментирование.

Еще не нашел, где устанавливается migration_dir_absolute (это могло бы помочь избежать правки)

Похоже, что не переносятся "параметры свойств инфоблока"

При переносе настроек ИБ (пробовал и через миграции, и через схемы данных) сами инфоблоки переносятся, со всеми параметрами, но вот эти новые параметры (которые переопределяют отображение в компонентах) - похоже, теряются по пути.

image

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.