В версии 3.28 добавился перенос изображений медиабиблиотеки, спасибо ребятам из Uplab.ru за помощь в разработке этого функционала и поддержку
Это пошаговый механизм с отображением прогресс-бара который перенесет изображения выбранных коллекций в xml-файл И создаст миграцию которая сможет также пошагово загрузить эти изображения на другую копию проекта Миграция создаст ту же иерархию коллекций что была в оригинальной медиабиблиотеке и разместит в ней изображения
В миграции не хранятся id коллекции и изображений, поиск дублей происходит по названию коллекции и названию изображения. Найденные совпадения будут обновляться, остальные добавятся.
Для чего это нужно: Синхронизация бд между копиями разработчиков, продакшеном, и всеми другими копиями.
Все изменения бд пишутся в файлы миграций, эти файлы, как и весь код проекта хранятся в системе контроля версий (например git) и попадают в копии разработчиков, после чего им необходимо выполнить накат новых миграций, чтобы актуализировать бд.
После установки модуля должна появиться директория /local/php_interface/migrations или /bitrix/php_interface/migrations - куда будут складываться миграции.
Создаем скрипт для запуска миграций через консоль migrate.php
Доступные команды ------------------------- create <description> - создать файл с пустой миграцией status - суммарная статистика по миграциям list - список миграций migrate --up --down - накатить, откатить все миграции, по умолчанию --up up <limit> - накатить несколько миграций, по умолчанию 1 down <limit> - откатить несколько миграций, по умолчанию 1 execute <version> --up --down - накатить или откатить миграцию, по умолчанию --up redo <version> - откатить+накатить миграцию
Пример вызова команд ------------------------- php migrate.php migrate php migrate.php execute Version20150119122646 --down php migrate.php up 3
Пример файла миграции: ------------------------- /bitrix/php_interface/migrations/Version20140806034146.php
<?php
namespace Sprint\Migration;
class Version20140806034146 extends Version {
protected $description = "";
public function up(){
//
}
public function down(){
//
}
}
в нем необходимо реализовать 2 метода up и down - которые запускаются при установке и откате миграции, например создание инфоблоков или какое либо другое изменение, которое должны получить все копии проекта.
Также в админке будет доступна страница /bitrix/admin/sprint_migrations.php?lang=ru которая представляет веб-интерфейс к миграциям, через него можно посмотреть список всех миграцией, установленных(зеленые) и нет(красные), можно создать миграцию и установить новые.
Здравствуйте! Подскажите если есть миграция написанная 10 месяцев назад. Но нужно изменить значения в полях в этой миграции, то лучше сначала её откатить или же накатить вновь созданную с новыми значениями сразу не откатывая старую?
Здравствуйте, этот блог не уведомляет меня о новых комментариях, заходите в группу телеграмма https://t.me/sprint_migration_bitrix отвечают там более оперативно. По вашему вопросу логика такая - если миграция накатилась - то ее код изменил бд, можете про нее забыть, сделайте новую с новыми значениями. Или переименуйте старую (укажите в названии более позднюю дату) тогда в она накатится заново, а гите не будет лишнего файла
Если у вас используется связка bitrix + symfony, да, такое бывает, то можно подключить модуль как бандл симфони
и запускать консольные команды модуля через консоль симфони
php bin/console sprint:migration Пример регистрации модуля как бандла
// app/AppKernel.php
use Sprint\Migration\SymfonyBundle\SprintMigrationBundle;
public function registerBundles()
{
$bundles = array(
//...
new SprintMigrationBundle(),
);
return $bundles;
}
Классы модуля должны уже быть автозагружены, через CModule::IncludeModule('sprint.migration')
В версии 3.8.4 добавился гаджет "Сводка по миграциям"
Отображает общий статус по всем миграциям, для всех конфигураций. Служит для того, чтобы лишний раз "мозолить" глаза и напоминать, что с последним пуллом пришли новые миграции/схемы и БД теперь отстаёт.
зеленый - все миграции установлены красный - есть неустановленные миграции
Чебан Валерий, допустим будет схема с данными на основе таблицы в бд, как понять при установке схемы какие данные надо обновить, какие добавить\удалить
1) Минимальная версия php для модуля повысилась до 5.6 (ставьте лайк если вы уже давно на php7) 2) Добавлен новый функционал для импорта\экспорта элементов инфоблоков и highload-блоков
Перенос элементов
Экспорт в xml
При запуске переноса создается миграция и директория, содержащая xml файл с данными, а также с изображениями и файлами, которые будут перенесены. Название директории состоит из названия файла миграции с добавлением "_files", например если файл миграции Version20190913102030.php, то ее директория с ресурсами - Version20190913102030_files. Пример xml-файла во вложении hlblock_elements.xml
Экспорт выполняется пошагово по 20 элементов.
Импорт из xml Чтобы импортировать элементы из xml-файла нужно запустить миграцию (уже на другой копии проекта)
Код импорта описан в файле миграции, пример во вложении Version20190913102030.php
В коде импорта можно задать свой метод создания элементов на основе данных из xml
Импорт также выполняется пошагово по 20 элементов.
При установке новых миграций можно отмечать их произвольным тегом:
php bin/migrate up --add-tag=release001
php bin/migrate up Version2019020200000 --add-tag=release001
Это бывает удобно в случае отката релиза, когда требуется вернуть его в начальное состояние, при условии что написан код отката, метод down() для каждой миграции
Откат миграций по тегу:
php bin/migrate down --tag=release001
Тег можно поставить только установленной миграции, он хранится в табличке миграций в базе данных По тегу можно искать миграции в админке через поле поиска По тегу можно отфильтровать список миграций в консоли
php bin/migrate ls --tag=release001
При откате миграции тег сбрасывается, так как удаляется запись о миграции из базы данных
1) Минимальная версия php для модуля повысилась до 5.4 (хотя надеюсь уже все давно переехали на php7) 2) Классы модуля перенесены в lib/ и подгружаются теперь автоматически битриксом (убран старый автолоадер) 3) Директория для архивных миграций по умолчанию располагается рядом с директорией миграций в папке migrations.archive 4) Добавлен новый функционал для работы со схемами данных
Схемы данных
Схемы данных это еще один подход к обмену изменениями бд между копиями проекта, заключается в том что вместо миграций, накатывающих изменения, описывается структура сущностей (например инфоблока) в файл и накатывается целиком этот файл. Такая схема будет визуальна понятна разработчику и глядя на нее он будет знать полное содержимое сущности.
При внесении правок в такую схему, совместно с другими разработчиками, будут происходить конфликты в git, что вынудит разработчика, при правке конфликта, привести схему к финальному виду.
Работа в админке
Первым делом создадим схемы данных, выберем все доступные конструкторы схем и запустим экспорт, схемы сущностей сохранятся в файлы, в директорию migrations.schema рядом с директорией для миграций
Пример схемы групп пользователей во вложении (user_groups.json)
Добавим несколько групп пользователей в схему и несколько удалим, запустим тестовый импорт
В логе справа будет показано что произойдет при импорте схемы. Проверьте что в логе корректная информация и запускайте импорт, список групп пользователей на сайте импортируется согласно вашей схеме.
В модуле предусмотрена возможность импортировать\экспортировать схемы выборочно или все сразу.
Для выбора схем которые требуется импортировать выборочно, может помочь информация об изменении схем.
Красный заголовок схемы говорит о том что содержимое схемы отличается от той что импортировали в последний раз и что, скорее всего, схему надо импортировать снова.
Зеленый заголовок схемы говорит о том что схема была успешно импортирована и ее содержимое не менялось.
p.s.
Сейчас описаны несколько конструкторов для наиболее использующихся структур. Вы можете писать свои конструкторы схем, также как вы писали конструкторы миграций, принцип тот же самый, добавляете свой конструктор в конфиг и пишете свой класс по аналогии с готовым конструктором.
Вкратце - колонкам модульных сеток можно добалять произвольные классы и реализовать либо свою систему из таких сеток, либо использовать уже готовые сетки из bootstrap
В релизе 2.5.3 добавилась возможность отображать и выполнять различный список миграций для разных окружений, это бывает необходимо когда, например, для тестовой среды нужны какие-либо промежуточные миграции, а для продакшена основные.
Раньше это было возможно сделать, например, сделав несколько директорий для миграций и меняя програмно конфиг
/local/php_interface/migrations.cfg.php или /bitrix/php_interface/migrations.cfg.php
где \MyProject::IsDev()) - ваша функция определяющая текущее окружение
Однако не всем было удобно хранить миграции в разных директориях и перетаскивать их из одной в другую, поэтому добавил еще параметр для фильтрации списка
Теперь задав в самом файле миграции такой фильтр можно отделить ее от общего списка и показывать и выполнять только для тестового окружения определенного вашим методом \MyProject::IsDev()
ключей в фильтрах может быть сколько угодно, но для отображения в списке все ключи\значения в конфиге должны присутствовать в классе миграции
Такой же фильтрации списка можно добиться переопределив метод isVersionEnabled() - опишите условие по которому показывать или нет миграцию в списке и соответственно выполнять ее при накате\откате всех сразу (команды php migrate.php migrate , php migrate.php up )
<?php
namespace Sprint\Migration;
class Version20171219185225 extends Version
{
public function isVersionEnabled()
{
return \MyProject::IsDev();
}
}
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».