Розробка Magento-модулів з розгортанням програми через Magento Composer

Введення

У статті описаний досвід розгортання девелоперської версії Magento-додатки з використанням Magento Composer'а. Структура типового Magento-додатки в нашій компанії:
  • Magento
  • Сторонні модулі, використовувані в проекті
  • розроблені нами модулі, використовувані більш, ніж в одному нашому проекті
  • Розробляється нами модуль, що містить функціонал конкретно для даного проекту
  • Тема для конкретного проекту


Девелоперська версія Magento-додатки повинна дозволяти розробляти код наших модулів і заливати зміни у відповідні репозиторії, дозволяючи кодом загальних модулів мігрувати між проектами.

У зв'язку з початком нового проекту для розгортання Magento-додатків вирішили спробувати Magento Composer. На даний момент у нас код кожного проекту зберігається у своєму SVN-репозиторії, плюс в окремому — всі розроблені нами модулі (як загальні, так і спеціалізовані):
  • інсталяція Magento і сторонні модулі для проекту 01;
  • інсталяція Magento і сторонні модулі для проекту 02;
  • ...
  • наші модулі;


Для використання Magento Composer'а проект розділили на наступні частини (кожна в своєму git-репозиторії):

  • z_mage_composer_prj_01_full: сценарії розгортання всього проекту, тема, сторонні модулі, не доступні через Magento Composer;
  • z_mage_composer_mod_01: перший модуль, від якого залежить проект;
  • z_mage_composer_mod_02: другий модуль, від якого залежить проект;




Підготовка оточення

В процесі експериментів з'ясувалося, що Windows погано підходить для розгортання девелоперської версії програми. Magento Composer пропонує дві стратегії розгортання: copy (копіювання файлів модулів в структуру Magento-додатки) і symlink (створення в структурі Magento-додатки символічних посилань на файли модулів). Девелоперська версія може використовувати тільки символічні посилання, т. к. потрібно тримати исходники модулів компактно у своїх папках у каталозі vendor (місце, в якому Composer розміщує файли використовуваних модулів). Символічні посилання в Windows відпрацьовують недостатньо якісно — зміни, внесені в оригінальний файл відображаються за посиланням з великою затримкою (як в IDE PhpStorm, так і на самому web-сервері). Плюс (точніше, мінус) — використовується в Magento підхід по знаходженню шаблонів і опису layout'ів (каталог app/design/frontend/[default]/[default]) не працює в Windows (потрібно модифікувати Mage_Core_Model_Design_Package::validateFile і Mage_Core_Block_Template::fetchView), але це вже скоріше проблема на рівні PHP, ніж на рівні Magento. Вообщем, після довгих спроб розгорнути девелоперську версію Windows була визнана не найзручнішим варіантом для розробки (хоча й можливо), тому для подальшого продовження залишився Linux (Ubuntu 14.04).

установкою самого Composer'а проблем не виникло:
curl-sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer


Все інше (в тому числі і установка Magento Composer'а) робиться через налаштування проекту в composer.json.

composer.json

Наводжу тільки значущі в даному контексті налаштування (повний варіант composer.json):
{
...
"type": "magento-module",
...
"require": {
"magento-hackathon/magento-composer-installer": ".*",
"magento-hackathon/composer-command-integrator": "*@dev",
"composer/composer": "*@alpha",
"magento/core": "1.9.1.0",
"magento-hackathon/hackathon_magemonitoring": ".*",
"connect20/nmmlm_log": ".*",
"praxigento/z_mage_composer_mod_01": "*@dev",
"praxigento/z_mage_composer_mod_02": "*@dev"
},
"repositories": [
{
"type": "composer",
"url": "http://packages.firegento.com"
},
{
"type": "vcs",
"url": "https://github.com/praxigento/z_mage_composer_mod_01"
},
{
"type": "vcs",
"url": "https://github.com/praxigento/z_mage_composer_mod_02"
}
],
"extra": {
"magento-root-dir": "mage",
"magento-deploystrategy": "symlink",
"auto-append-gitignore": true
}
}


Секція require
  • magento-hackathon/magento-composer-installer: безпосередньо сам Magento Composer;
  • magento-hackathon/composer-command-integrator: модуль для інкрементального оновлення Magento-модулів по ходу розробки (для створення символічних посилань на нові файли при додаванні файлів в модулі);
  • composer/composer: необхідний точний класифікатор «alpha» для того, щоб міг працювати composer-command-integrator;
  • magento/core: власне код Magento;
  • magento-hackathon/hackathon_magemonitoring: сторонній модуль, що завантажується з репозиторію Magento Composer (для прикладу);
  • connect20/nmmlm_log: модуль, вільно поширюваний через Magento Connect (довантажуючи з сховища Magento Connect сховище Magento Composer)
  • praxigento/z_mage_composer_mod_01: один наш власний модуль, код якого знаходиться в репозиторії github'а;
  • praxigento/z_mage_composer_mod_02: другий наш власний модуль, код якого також знаходиться в репозиторії github'а;


Секція repositories
Замикаємо composer на репозиторій Magento-модулів:
{
"type": "composer",
"url": "http://packages.firegento.com"
}

… і вказуємо адреси репозиторіїв, де знаходяться наші власні модулі, використовувані в проекті:
{
"type": "vcs",
"url": "https://github.com/praxigento/z_mage_composer_mod_01"
},
{
"type": "vcs",
"url": "https://github.com/praxigento/z_mage_composer_mod_02"
}


Секція extra
  • magento-root-dir: задаємо каталог, в якому будемо розгортати Magento (mage);
  • magento-deploystrategy: задаємо стратегію розгортання — symlink для девелоперської версії;
  • auto-append-gitignore: вказуємо, що файли Magento-модулів, які будуть лінкуватися в Magento-додаток (каталог mage), повинні додаватися в файл mage/.gitignore для виведення з-під контролю версій;


Розгортання проекту

$ git clone git@github.com:praxigento/z_mage_composer_prj_01_full.git full
$ cd full
$ composer install

виведення на консоль
Loading composer repositories with information package
Installing dependencies (including require-dev) 
- Installing justinrainbow/json-schema (dev-master 87b54b4)
Cloning 87b54b460febed69726c781ab67462084e97a105

- Installing icecave/isolator (2.3.0)
Loading from cache

- Installing eloquent/pops (3.1.1)
Loading from cache

- Installing eloquent/ліберейтор (1.1.1)
Loading from cache

- Installing eloquent/enumeration (5.1.0)
Loading from cache

- Installing eloquent/composer-config-reader (2.0.0)
Loading from cache

- Installing magento-hackathon/magento-composer-installer (dev-master 38e6c01)
Cloning 38e6c01e6252fa408fbe63ef0b5b632b154f421b

- Installing symfony/console (2.7.x-dev b2d63b9)
Cloning b2d63b962688615d9b895a3d0be8bca7c3acf2fd

- Installing praxigento/z_mage_composer_mod_01 (dev-master 73ac1b0)
Cloning 73ac1b00c04eeb7037a5fb4bcea2502d06c588a0

- Installing praxigento/z_mage_composer_mod_02 (dev-master ae7f96c)
Cloning ae7f96cb757a971e95d23f4ce6141bb441315075

- Installing seld/jsonlint (1.3.0)
Downloading: 100%

- Installing symfony/process (2.7.x-dev 3131373)
Cloning 3131373c59f463709b04e39ae0818a2b84d01d38

- Installing symfony/finder (2.7.x-dev 3163e33)
Cloning 3163e335375f3433569996fd68c89887e4a82d29

- Installing composer/composer (dev-master 095dc61)
Cloning 095dc6129550de93cd98170c8e6c6ccd4558e983

- Installing magento-hackathon/composer-command-integrator (dev-master 826aa5a)
Cloning 826aa5a2a68d10d991b457c397b98773793f0f4c

- Installing magento/core (1.9.1.0)
Loading from cache

- Installing magento-hackathon/hackathon_magemonitoring (dev-master 393fd28)
Cloning 393fd2851597ed7e1a9ab87dae7f05feab455e3b

- Installing connect20/nmmlm_log (0.3.0)
Downloading: 100%

icecave/isolator suggests installing eloquent/asplode (Drop-in exception-based error handling.)
magento-hackathon/magento-composer-installer suggests installing colinmollenhour/modman (*)
magento-hackathon/magento-composer-installer suggests installing theseer/autoload (~1.14)
magento-hackathon/magento-composer-installer suggests installing zetacomponents/console-tools (dev-master)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing psr/log (For using the console logger)
Writing file lock
Generating autoload files



В результаті розгортання проекту вихідні коди наших модулів потрапляють в каталог vendor (скріни взяті з локальної станції на Windows)

… линкуются в Magento-каталог mage:

… тема і модулі, які встановлюються не через Magento Composer, заливаються прямо в каталог mage:

Точки монтування різних репозиторіїв з вихідними кодами:


У проекті два файлу .gitignore:
  • .gitignore: заповнюється вручну розробниками;
  • mage/.gitignore: заповнюється автоматично Magento Composer'ом при розгортанні самої Magento і модулів;


Особливості розробки модулів

Всі файли модуля повинні бути прописані в реєстрі mapping'а modman:
path/to/file/in/module path/to/file/in/magento

Після додавання нового файлу в модуль потрібно запустити command integrator, щоб нові файы залинковались в кореневий каталог Magento:
$ ./vendor/bin/composerCommandIntegrator.php magento-module-deploy

Щоб модуль розгортався у вигляді, придатному для роботи з системою контролю версій, в composer.json файлі модуля потрібно вказати:
{
"name": "praxigento/z_mage_composer_mod_01",
...
"config": {
"preferred-install": "джерело"
}
}

Додатково

"Використання різних VCS репозиторіїв в PhpStorm"

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.