Windows в качестве рабочего места

Yoskaldyr

.
Партнер клуба
@grigori пхп под мак это совсем не то что пхп под вин. Тема называется как? Правильно - Windows в качестве рабочего места
и консольный пхп должен быть той же версии что и внутри контейнера, а то могут ооочень интересные сайд эффекты.

Тему можно не продолжать и так понятно что везде костыли и без них никуда и всегда надо смотреть какие именно подходят в конкретном случае. В некоторых случаях случаях костыли не сильно заметны и почти не мешают работать, но иногда больше. Но самое печальное, что большинство даже явные костыли считает нормой и будет с пеной у рта доказывать, что это норма. Аналогично было в теме насчет линукса (у которого явные проблемы с графикой).
@grigori запускать для композера полностью другую версию пхп под другой ос - это явный костыль, который может привести к довольно трудно воспроизводимым багам.
 

AmdY

Пью пиво
Команда форума
Где-то год назад под виндой insider preview пробовал развернуть свой проект (symfony, nodejs, angular). В docker cо скрипом, но работало, раза в три медленнее, чем в linux, но жить можно. После макбука даже особого дискомфорта не замечал, пока не перегружался в святой linux.

Но у @Yoskaldyr вечно какие-то свои уникальные проблемы и грабли.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Все-таки у меня вопрос про composer.
Как я понимаю, он идет по json-структуре, обсчитывает дерево зависимостей, создает папки и скачивает архивы.
Запуск под другой актуальной средней версией php 7 чисто теоретически может привести к каким-то багам, или кто-то реально встречал такие проблемы?
 

fixxxer

К.О.
Партнер клуба
Не встречал таких ситуаций, композер кроссплатформенный by design: кто-то в команде сидит под линуксом, кто-то на маке, кто-то под виндой, все пользуются composer-ом, комитят изменения в composer.json/lock, никаких проблем ни разу не возникало, и я слабо себе представляю, где там что-то может пойти не так.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Не встречал таких ситуаций, композер кроссплатформенный by design: кто-то в команде сидит под линуксом, кто-то на маке, кто-то под виндой, все пользуются composer-ом, комитят изменения в composer.json/lock, никаких проблем ни разу не возникало, и я слабо себе представляю, где там что-то может пойти не так.
Если у тебя не совпадает версия пхп у разраба (например, 7.3) и на целевом сервере для выкладки (7.2), то в выкладку могут попасть неподдерживаемые версии депенденсов (нпр, у зависимости с ограничением ^2.0 есть пакеты разных версий: для php 7.2 может быть какой-нибудь 2.12.22, а для 7.3 - 2.56.1) и в деплое тебе может приехать несовпадающая версия пакета (привет, guzzle, я смотрю на тебя)
Если разраб запускает композер локально, и у него есть проекты, расчитанные на разные версии пхп, то так можно все сломать.

Как костыль, в composer.json есть секция {platform: { php: 7.2 }} что бы указать явную совместимую версию, и он будет считать при разрешении AST что у тебя именно та версия, что в платформе указана.
 

fixxxer

К.О.
Партнер клуба
Я как-то привык считать это не костылем, а обязательным атрибутом composer.json. Так же, как и указание всех используемых extensions, на которые принято ссылаться как на зависимости (типа ext-json или ext-curl).
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Теперь я понял. Проблема возникает кода разработчики не определяют окружение в конфиге явно. Но им не нужен докер - это инструмент для декларативного определения окружения. То есть, когда докер используется как виртуалка без участия ЦНС. Спасибо.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Я как-то привык считать это не костылем, а обязательным атрибутом composer.json. Так же, как и указание всех используемых extensions, на которые принято ссылаться как на зависимости (типа ext-json или ext-curl).
Это костыль в том плане, что жестко лочит тебя на версию пхп по месту исполнения, которую ты таскаешь в коде проекта как зависимость от среды исполнения, и логически убивает как раз ту самую "кроссплатформенность" версий композера. Мне не очень нравится, но я пользуюсь ей, конечно.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
не понимаю почему это убивает кросс-платформенность, тот же composer будет работать с любой платформой и значением в конфиге,
аналогично указание версии библиотеки в зависимостях не связано с ее кросс-платформенностью
 

fixxxer

К.О.
Партнер клуба
Нормально. Если я знаю, что делаю, я скажу композеру ignore-platform-reqs.
 

Yoskaldyr

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

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

Конечно такое в подавляющем большинстве случаев будет работать, при точной настройке зависимостей, но зачем изначально создавать такой эджкейс, что бы потом он вылез нежданчиком? А он гарантированно вылезет, рано или поздно. Т.е. изначально создаем более непредсказуемую по поведению систему.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
как же ты на улицу-то выходишь? там гарантированно вылезут какие-то неожиданные случаи рано или поздно, изначально идешь в непредсказуемую по поведению среду
 

Yoskaldyr

.
Партнер клуба
@grigori Ну как всегда передергиваешь фактами.
Да куча неопределенности всегда присутствует, но зачем эту неопределенность искусственно увеличивать?

Если взять твой пример о выходе на улицу.
Например зима, отрицательная температура и только редко бывает гололед перед домом (крыльцо, ступеньки). Но вот ты решил ежедневно крыльцо и ступеньки поливать холодненькой водичкой. В каком случае шанс упасть больше при ежедневном выходе из дома: в первом или во втором?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Как это для чего - для удобства и скорости, конечно!
Определенности не бывает, вопрос всегда в уровне риска конкретной ситуации. Если указать версию PHP, вероятность проблем становится явно ниже допустимого уровня для разработки. Скорее уж в самом фреймвоке или либах поймаю сегфолт, чем багу в моем коде от платформозависимого поведения либ _при установке_ композером.
 

WMix

герр M:)ller
Партнер клуба
Если знаешь продуктивную среду, то чаще всего под нее подстраиваешься, какой бы она не была. Если юникс то юникс, при виндовс виртуалка. И чес слово виртуалка меньшее из всех зол. Докер под виндами пробывал, возможно не досконально, чтоб увидеть особенности.
 
Сверху