andreyryabin / sprint.migration Goto Github PK
View Code? Open in Web Editor NEWМиграции для разработчиков (1С-Битрикс)
Home Page: http://marketplace.1c-bitrix.ru/solutions/sprint.migration/
License: MIT License
Миграции для разработчиков (1С-Битрикс)
Home Page: http://marketplace.1c-bitrix.ru/solutions/sprint.migration/
License: MIT License
Привет! Поставил модуль, но сразу после установки админка начала кидаться эксепшенами...
Если нет времени, то я на досуге поковыряю и сделаю пулл-реквест
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
Настройки модулей с некоторых пор хранятся в 2х таблицах (b_option и b_option_site).
https://bxapi.ru/src/?module_id=main&name=Option::load
Соответственно, часть настроек (которые лежат в b_option_site) сейчас не попадает в миграции.
После расхождения прода и теста по почтовым шаблонам (видимо), при миграции на прод столкнулся с ошибкой "Неверный тип события" при миграции одной из форм.
Вылечилось путём комментирования arMAIL_TEMPLATE с ID почтовых шаблонов в параметрах миграции. Форма смигрировалась, нужные почтовые шаблоны подцепились, т.к. MAIL_EVENT_TYPE у них символьный. Только, разумеется, без галочек использования.
Может сделать выгрузку почтовых шаблонов опциональной, по галочке?
ещё хотелось бы, чтобы была возможность передавать параметры для билдера в автоматическом режиме. К примеру, при срабатывании события создания нового инфоблока запускать IblockBuilde
автор Роман Гонюков
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, но сейчас очень очень потребовалось реализовать миграцию схем своих таблиц.
Прошу либо подсказать как сделать (если есть), либо подсказать где смотреть (кастомизирую и пришлю реквест).
Нужна миграция для опросов.
Спасибо!
Если нет пользовательских свойств в ИБ и стоит галочка в группе настроек "Свойства инфоблока", то при попытке сгенерировать миграцию ничего не происходит, если убрать галочку, то все чудесно создается.
автор Антон Соколов
Я решил эту задачу так:
1 - fix в модуль - https://drive.google.com/file/d/11mw3DPUW01vE_Vbv6HcmYJ-D5ttYpiXf/view?usp=sharing
2 - конфиг и папка с миграциями - https://drive.google.com/file/d/1p-3iO6SrA1kHCd7tLV1W321T9TaHOKrY/view?usp=sharing
3 - в админке все корректно отображается
Сделать миграцию для списка сайтов со всеми настройками (язык, домены, шаблоны), автор Игорь Долгополов
Отсутствует миграция для списков Bitrix24. При создании миграции инфоблока, который является списком, после переноса миграции в списке отсутствуют видимые поля.
Ошибка: IblockTrait::getIblockUid: Инфоблок не найден
Ошибка возникает когда в свойствах ИБ есть привязка к элементам(разделам) у ИБ которых нет символьного кода.
Но это не позволяет выбрать другие свойства для миграции. Что вызывает неудобство. Возможно есть смысл показывать такие свойства на следующем шаге просто disabled - но давать выбрать другие?
При автоматическом создании миграции для пользовательского свойства "привязка к HL", в описываемых полях указывается ID напрямую, который не факт, что будет совпадать на другом сервере
Встроенный сканер безопасности ругается на статическую уязвимость.
Файл: /local/modules/sprint.migration/admin/steps/schema_import.php
Cross-Site Scripting
46: echo $_POST['step_code']
ты не рассматриваешь правку в свою библиотеку, которая бы позволяла получать более детальную информацию о возникшем исключении?
Проблема заключается в том, что существующий вывод крайне неинформативен и 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. Вроде, генерил его через админку, но ....
Часто возникает необходимость сохранения также исходных данных для элементов инфоблоков.
Можно добавить хэлпер, который делает стандартными средствами выгрузку и привязывает ее к схеме инфоблока.
Есть проект с кодировкой CP1251
При миграции элементов происходит восстановление миграции в неверной кодировке.
https://i.imgur.com/2cvstzX.png
оба проекта на windows-1251 , но миграция создается в utf-8
Сейчас, закрывая задачу в Jira, я пишу туда все контентные действия в админке, чтобы после тестирования не вспоминать, что и где делалось. Это жутко неудобно, неизбежны потери и кривотолки. Необходимо дать возможность все действия в рамках одной задачи заталкивать по нескольким простым миграциям. Думаю, будет вполне достаточно сделать поле ввода для указания через запятую всех необходимых символьных или внешних кодов элементов.
Если свойство инфоблока некорректно настроено (свойство типа "справочник" содержит ссылку на несуществующий ХЛ-блок) - модуль при попытке создать/импортировать схему данных закономерно выдает ошибку. Но сам текст ошибки не содержит информации о том, какое свойство какого инфоблока ссылается "вникуда".
(в моем случае, дословно текст выглядел так: "HlblockHelper::getHlblockUid: Highload-блок не найден" )
Если добавить в сообщение информацию об инфоблоке и проблемном свойстве - это сильно поможет в поиске ошибок.
PS причем, некорректная ссылка на несуществующий инфоблок (а не хайлоад-блок) подобной ошибки не вызывает вообще.
Голосование за функционал https://dev.1c-bitrix.ru/community/webdev/user/39653/blog/36480/
Что-то типа такого чтобы можно было делать:
$console = new Sprint\Migration\Console($argv, ['migration_dir'=>/my_module/migrations/']);
$console->commandUp();
Артем Первушин ([email protected])
Увидел косяк в модуле: Если нет свойств у инфоблока, а галка тыкнута переносить свойства, то миграция не создается и ошибок не выводится. Надо не тыкать галку если нет свойств.
По сути настройки которые делаются в коробке б24 надо реализовать
автор timetocoding
Ось: 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\
P.S. Причина по которой проект находится на другом диске - SSD. Сервер расположен на HDD.
Не перенеслись данные из свойства типа HTML/текст, хотя в xml данные есть.
Миграции выполнил на 2 серверах, оба раза данные в это поле не перенеслись.
Версия модуля: 3.25.1
PHP 7.4
mbstring.func_overload отключена
В первую очередь интересуют картинки. Нужно мигрировать название и вложенность коллекции, набор картинок в ней со всеми атрибутами
В методе: $helper->UserOptions()->saveElementGrid();
В элементе массива "custom_names" при указании ['PROPERTY_КОД' => 'Custom name'] не происходит автоматического преобразования "PROPERTY_КОД" в "PROPERTY_ИД" из-за чего не изменяется имя в колонке.
Внутри 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');
ну и так далее.
Не нашел возможности средствами библиотеки сделать инфоблок торговым каталогом, ее нет или плохо искал?
При создании миграции через "Создать миграцию для инфоблока" не переносятся настройки \Bitrix\Iblock\InheritedProperty
автор @webarchitect609
по аналогии с командой mark сделать команду delete которая удалит и файл миграции и запись в базе если они есть
ну что за дичь)
пофиксите пожалуйста
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 (это могло бы помочь избежать правки)
ошибка возникает в случае если нет библиотек
XMLReader XMLWriter а также отключены модули highloadblock или iblock
автор Сахаров Павел
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.