Настройка разработки Magento

23

Этот вопрос направлен на создание среды разработки. У меня есть некоторые конкретные требования:

  1. Я хочу иметь возможность использовать мое решение под Linux, Windows и Mac OS, поскольку все сотрудники нашей команды используют все эти ОС (например, разработчики внешнего интерфейса используют Windows / Mac, в основном разработчики внутреннего интерфейса используют Linux)
  2. Мне нужно использовать модман
  3. Мне нужно использовать композитор
  4. Мне нужно использовать Github, а также мои личные репозитории Git
  5. Мне нужна правильная среда разработки, например Netbeans или PHP Storm
  6. Я хочу очень хорошее выступление

Моя текущая настройка - это виртуализированный образ Ubuntu в Virtualbox. Все три ОС могут запускать Virtualbox, поэтому пункты 1) - 5) все выполнены.

Однако в настоящее время я не полностью удовлетворен 6). Это особенно верно при запуске решения из Ubuntu 12.04. Virtualbox кажется намного более стабильным и отзывчивым в Windows 7. Однако многие люди в нашей команде используют Linux, поэтому я хотел бы улучшить решение.

У кого-нибудь есть сопоставимые настройки в VMWare или, может быть, даже docker.io, и он может сообщить, работает ли он более стабильно? Или у кого-нибудь есть другие сопоставимые решения / идеи?

mpaepper
источник
хороший вопрос! мы также работали над аналогичной настройкой, но пока не включили ее в наш обычный рабочий процесс. с нетерпением жду ответов.
Анна Фёлькл
просто быстрая идея: разве нельзя работать без виртуальной машины в Linux и просто установить все, что работает в виртуальной машине? или вы используете одну виртуальную машину для одного проекта?
Анна Фёлькл
Вы используете виртуальную машину без головы или с графическим интерфейсом? И как вы синхронизируете файловую систему образа VM с хост-системой? Общие папки? Samba? (Я предполагаю, что IDE работает на хосте, а не на виртуальной машине). Это может иметь большое значение.
Винай
@ AnnaVölkl да, это было бы возможно, но это разрушило бы некоторые из преимуществ. Например, всякий раз, когда вы обновляете базовый образ, все пользователи Linux должны будут вручную обновить изменения. Кроме того, если вы хотите перенести свою коробку с одного компьютера на другой (например, на работу дома или в другом месте), все гораздо сложнее.
mpaepper
1
Как сказала Анна: мы тоже работаем примерно так. Мы используем Vagrant для создания образов виртуальных машин, и это работает довольно хорошо. Как вы говорите, производительность (относительно скорости файлового ввода-вывода в общих папках) - это главное, над чем мы должны работать перед переключением. Для хост-систем Linux могут помочь общие ресурсы NFS . Наша большая проблема заключается в том, что большинство наших разработчиков используют хост-системы Windows, и, в отличие от ссылки, производительность Windows не очень хорошая. Я слышал это от разных людей сейчас, это не только мы.
Матиас Цейс

Ответы:

8

Я использую vagrant, git и некоторые сценарии сборки на phing. Бродячая машина запускает базу данных и веб-сервер, git используется локально для отслеживания изменений в моих расширениях и скрипт сборки, используемый для обновления /var/wwwкаталога на моей бродячей машине (ну, на самом деле он используется везде, где мне нужно создать среду).

Phing

Наверное, самая интересная часть - это phing, который для меня работает как modman + composer. Он имеет несколько целей, включая сборку, настройку и установку.

Цель сборки загрузить определенную версию magento (указанную в конфигурации сборки) с внутреннего веб-сервера и распаковать ее в каталог сборки. Затем запустите другие цели, которые устанавливают разрешения для файлов и очистите кеш. Затем он создает символические ссылки на все файлы в исходном каталоге. В результате я получаю все файлы, готовые для использования в моей директории сборки. Если файлы ядра magento уже находятся в каталоге сборки, они пропускают загрузку и просто обновляют символические ссылки, поэтому я использую эту цель для перестройки среды каждый раз, когда мне нужно обновить символические ссылки. Для бродячей машины исходный каталог находится в /vagrant/src(общая папка), а каталог сборки - /var/www.

Цель установки загрузить и импортировать дамп базы данных для определенной версии magento. Затем запустите установку цели.

Цель установки просто создать файл local.xml со всеми настройками.

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

Я создал «ярлык» на бродячей машине, который упрощает доступ к сборке. Например, чтобы перестроить проект мне нужно просто набрать, vagrant ssh -c magebuildи он автоматически запускает phing в /vagrantкаталоге.

Затем я назначил эту команду определенной комбинации клавиш в моей IDE PHPStorm, и теперь я могу перестроить проект, просто нажав Alt + B в моей IDE. Но так как я использую символические ссылки, это не очень частая операция.

бродяга

Ящик для vagrant - это мой собственный ящик с Ubuntu 12.04 на борту, на самом деле это просто стандартная версия 12.04 со всем предустановленным программным обеспечением + ярлык и некоторая конфигурация. В файл vagrant я поместил только настройки переадресации портов, частную сеть, чтобы можно было использовать xDebug, и добавил ярлык сборки в соответствующие положения.

GIT

В git я отслеживаю только мои файлы расширений, build.xmlдля phing и Vagrantfile. Так что каждый, кто хочет создать среду, может просто клонировать репозиторий и запустить vagrant up. Затем он подготовит виртуальную машину к работе. Весь этот процесс занимает 1-2 минуты. Если вы хотите построить проект локально (без использования ВМ), вы можете запустить phing build install.

Сергей Колодяжный
источник
2

В настоящее время моей средой разработки является Ubuntu v12.04 с VMWare. Я работаю полностью внутри виртуальной машины, с полным графическим интерфейсом и использую общий доступ к файлам samba в Ubuntu только в том случае, если мне нужно получить доступ к файлам с моей операционной системы Windows 7. Я обычно обращаюсь к сетевому диску и сопоставляю его с помощью внутреннего IP-адреса ВМ через NAT для работы в сети с ВМ. Использование других решений оказалось намного медленнее, чем общих папок VMWare. У меня это отключено в моих настройках VMWare Image. Однако я устанавливаю инструменты VMWare, чтобы можно было легко копировать / вставлять данные на мой хост-компьютер и наоборот.

Как отметил Матиас Зейс, будьте осторожны при выборе сетевых / общих папок с вашей виртуальной машиной, так как некоторые из них окажутся проблематичными.

Я был предыдущим пользователем VirtualBox, но обнаружил, что VMWare более стабильный и работает приемлемо (по крайней мере, для меня). Однако я бы выполнил ваши собственные тесты, чтобы лучше всего удовлетворить ваши потребности и требования, т.е. Vagrant использует VirtualBox.

IDE: я довольно широко использовал Netbeans в качестве своей предпочтительной среды IDE, но с тех пор перешел на более легкое решение, такое как Sublime Text 2 . Я редко открываю Netbeans, так как в основном для целей X-Debug и более простого рефакторинга. NetBeans, PHPStorm, Eclipse и т. Д. Являются IDE на основе Java и могут быть очень ресурсоемкими.

ОБОРУДОВАНИЕ: Чтобы добавить больше, аппаратное обеспечение всегда будет играть ключевую роль в производительности (очевидно). Если ваши разработчики все еще используют жесткие диски, я бы посоветовал инвестировать в SSD для них. Так как Magento имеет очень большое количество файлов / папок, это значительно повысит производительность разработчиков. Во время разработки: при отключенном кэшировании и при простом обходе дерева папок в SVN / GIT или в вашей IDE. Предоставление вашей виртуальной машине достаточно оперативной памяти также не менее важно.

Мой хост-компьютер: Samsung SSD 512 ГБ. Место на диске, Win7 (64-разрядная), 8 ГБ ОЗУ, i7 2,4 ГГц (8 ядер).

Моя виртуальная машина: Samsung SSD, 30 ГБ дискового пространства, Ubuntu 12.04 (32 бита), 3 ГБ ОЗУ, i7 (выделено 4 ядра).

ВОПРОСЫ, КОТОРЫЕ НАДО ЗАДАТЬ: Самый большой вопрос заключается в том, чтобы создать один образ виртуальной машины разработчика, который является легковесным и многократно используемым в нескольких проектах, или создать образ для каждого проекта. Раньше я пытался создавать меньшие виртуальные машины для каждого проекта, однако реконфигурирование, постоянно включающее мой рабочий процесс разработки, стало слишком тяжелой работой, и теперь я использую одну большую виртуальную машину и изо всех сил стараюсь сохранить каждый проект как можно более изолированным.

Поддержание ОС, IDE, стека LAMP, обновлений / конфигураций и т. Д. Может стать рутиной, если выбран маршрут для нескольких ВМ на проект. В конечном итоге это приводит к увеличению времени разработки (и еще худшему неоплачиваемому времени для локальных настроек среды).

Это также оказалось полезным, так как я быстро смог получить доступ к другим файлам проекта без необходимости открывать новую виртуальную машину и еще больше разделять свое оборудование. Недостатком является то, что в идеале я бы хотел, чтобы каждый проект был изолирован от других проектов, чтобы предотвратить любые непредвиденные проблемы со средой (например, php.ini, my.cnf, httpd.conf и т. Д.). Пока что компромисс между доступностью всех проектов оказался более изобретательным.

Опять же, это зависит от ваших требований и потребностей, поэтому оцените их заранее.

ОБРАТНАЯ СВЯЗЬ: что приводит к обратной связи. Получите как можно больше информации от ваших разработчиков. В конечном итоге их требования должны быть удовлетворены, а их проблемы понятны, прежде чем будет найдено правильное решение. У всех разные рабочие процессы, и не всем удобно работать в той ОС, которую вы выбрали для разработки. Мое эмпирическое правило: пусть разработчик выберет свою ОС и IDE, в которых он наиболее удобен и будет работать лучше всего. Таким образом, даже легкая безликая виртуальная машина Linux может оказаться полезной для их нужд, но, очевидно, может столкнуться с проблемой совместного использования папок в локальной сети между хостом и виртуальной машиной.

ПОРТАТИВНОСТЬ: Я также поиграл с идеей сохранить образ виртуальной машины на чем-то вроде Dropbox, чтобы я мог легко получить к нему доступ в любое время, когда это потребуется. Поскольку такие сервисы, как Dropbox, сравнивают по частям то, что хранится, казалось логичным, что синхронизируются только те биты, которые я изменил. Однако это оказалось не так, поскольку я полагаю, что это связано с внутренними данными о том, как сохраняется файл образа, и я буду ждать весь день / ночь только для синхронизации моей виртуальной машины.

ЗАМЕЧАНИЯ. Чем больше места на диске выделено для виртуальной машины, тем больше становится образ, помните об этом при распространении образа среди разработчиков. Фронтальная загрузка файлов проекта для каждого проекта может быть излишней, и я бы оставил это каждому разработчику для настройки после того, как у него будет созданный образ.

У Эшли Шредер есть довольно старая связанная статья, которая хорошо читается, а также некоторые комментарии Фумана и Колина

Надеемся, что это поможет понять проблему, указанную в списке, № 6.

B00MER
источник