Избегайте конфликтов в сценариях настройки с несколькими разработчиками

magento.stackexchange https://magento.stackexchange.com/questions/1497

Вопрос

Мы используем Magento Настройка сценарии Расположен в SQL и каталогах данных, чтобы распространять изменения данных на все рабочие копии и среды. Это включает в себя настройки конфигурации, создание новых таблиц, атрибутов и так далее.

Обновлять Проектный код уходит в несколько Client_module расширения.

Тем не менее, достаточно часто нам нужно добавлять миграции данных (т.е. сценарии настройки), которые нельзя отнести к существующему расширению. Таким образом, мы используем Company_Client Module (или client_general, что -то в этом роде) для этих изменений.

Представить несколько разработчиков Работа над тем же проектом одновременно. Может случиться так, что разработчик A и разработчик B оба сталкиваются с номером версии Company_Client и создают новый сценарий обновления. Даже если вы часто обновляете свою рабочую копию, вы получите конфликты Чаще всего, чем вам нравится, необходимо менять версию вашей местной компании по производству компании и убедиться, что сценарии ваших коллег работают, когда вы внесете их изменения.

Три решения с макушки моей головы:

  1. Создайте много расширений для конкретных частей для проекта (загрязняет пулы кодов с помощью многих ненужных расширений).
  2. Создайте одно расширение на одного разработчика для обновления сценариев (может работать, но не имеет смысла).
  3. Укусить пулю и вручную сделать такой конфликт, который я объяснял раньше.

Как вы справляетесь с этим?

Это было полезно?

Решение

Я считаю, что нашел решение, которое удовлетворяет мои потребности.

Мой Предварительные условия:

  • Используйте только одно расширение для всех небольших миграций данных / структуры, которые не вписываются в какое -либо другое расширение
  • Включить несколько разработчиков создавать сценарии настройки без конфликтов из -за номеров версий

Первая часть моего решения: используйте Несколько ресурсов сценария настройки В пределах одного расширения. Это легко возможно (содержание config.xml):

<?xml version="1.0"?>
<config>
    <!-- Your other config stuff... ->
    <global>
        <!-- Your other config stuff... ->
        <resources>
            <[your_setup_name_1]>
                <setup>
                    <module>[Your_Extension]</module>
                </setup>
            </[your_setup_name_1]>
            <[your_setup_name_2]>
                <setup>
                    <module>[Your_Extension]</module>
                </setup>
            </[your_setup_name_2]>
        </resources>
    </global>
</config>

Проблема, с которой вы столкнетесь, заключается в том, что все ваши ресурсы настройки будут иметь одинаковый номер версии в таблице баз данных core_resource (это номер версии, который вы указываете в своем modules узел). Вы не хотите этого, поскольку это снова создаст проблемы и конфликты для ваших разработчиков.

Введите вторую часть моего решения: Пользовательский класс настройки ресурсов с крошечным изменением. Модифицируя одну линию в каждом из методов applyDataUpdates() а также applyUpdates() Вы можете сказать Magento прочитать номер версии из другого узла XML.

Заменять

$configVer = (string)$this->_moduleConfig->version;

с

$configVer = (string)$this->_resourceConfig->setup->version;

Теперь вы можете указать разные номера версий для каждого из ваших ресурсов настройки:

<?xml version="1.0"?>
<config>
    <!-- Your other config stuff... ->
    <global>
        <!-- Your other config stuff... ->
        <resources>
            <[your_setup_name_1]>
                <setup>
                    <module>[Your_Extension]</module>
                    <class>Emzee_MultipleSetupVersions_Model_Resource_Setup</class>
                    <version>0.0.3</version>
                </setup>
            </[your_setup_name_1]>
            <[your_setup_name_2]>
                <setup>
                    <module>[Your_Extension]</module>
                    <class>Emzee_MultipleSetupVersions_Model_Resource_Setup</class>
                    <version>0.0.2</version>
                </setup>
            </[your_setup_name_2]>
        </resources>
    </global>
</config>

Сценарии настройки будут выполнены независимо, а номер версии корреспондента будет записан на core_resource. Анкет Все остальное должно работать как всегда.

Теперь тебе просто нужно Решите свою стратегию Как разделить ресурсы (один ресурс настройки на объект, на одного разработчика, ...).

Вы можете взглянуть на доказательство расширения концепции на GitHub.

Другие советы

Из приведенной выше Конвенции по именованию Company_Client это звучит так, как будто вы оставляете применение только для 1 модуля, специфичного для одного проекта на одного клиента, который заставляет нескольких разработчиков работать в одном и том же модуле, в то же время, вероятно, развивая совершенно разные функции.

Почему бы не пойти с настройкой client_module, где модуль описывает цель создаваемого модуля? Этот подход работал нормально для меня в прошлом, а также уверяет, что вы не разрабатываете ни одного, довольно раздутого модуля, который делает всевозможные вещи.

Иногда я понимаю, что вам нужно внести незначительные изменения, которые не реально оправдывают их собственный модуль, и в этом случае я склонен использовать один модуль с одним и тем же именем модуля для всех клиентов, но клиент, очевидно, меняется - я урегулировал Client_override для этого виды изменений.

Вы всегда собираетесь время от времени сталкиваться с противоречивым кодом, но обеспечение правильного рабочего процесса, хорошего именования модулей и интеллектуального использования ветвления в вашем репозитории сведет это к минимуму.

Я разрабатываю расширение под названием «Расположение Mage» с намерением решить проблему поддержания различных среда синхронизации:

https://github.com/pug-more/mageplow

Он все еще должен быть расширен, хорошо задокументирован и полностью протестирован, даже если я уже использую его в нескольких проектах, имеющих некоторые преимущества.

Это с открытым исходным кодом, и любая помощь или предложение будут оценены.

С Уважением

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top