Павел
Странный кейс конечно в ишью, но мне не помог. Там где у меня не подхыватывается никогда докблок (что устраивает), там есть и no-dev установка (прод), и обычная (тест окружение в ci), и там и там не подхватывается и норм работает.
Dmitry
ну хер знает, мне не нравится поведение, зависящее от 3rd party компонента, который вообще слабо относится к сериалайзеру
Это прямо относится к сериалайзеру. Если нужны типы из докблоков, то доустановливаем парсер докблоков.
Konstantin
не, это чушь собачья
Dmitry
не, это чушь собачья
Аналогично и у symfony/validator. Если описываем правила в аннотациях, то доустанавливаем doctrine/annotations. Если пишем в атрибутах, то не доустанавливаем.
Konstantin
единственное место, откуда можно узнать про этот парсер - это саджест. ни в одной доке нигде это не написано охуенно красными буквами (как должно бы). сериалайзер ставил разработчик А полгода назад, ему не надо было докблоки. докблоки потребовались разработчику Б сейчас, никаких саджестов, разумеется, он не видит. просто у него этот кусок говна не работает
Павел
Это прямо относится к сериалайзеру. Если нужны типы из докблоков, то доустановливаем парсер докблоков.
Даже не устанавливая, он есть вендоре как обязательный для некоторых паков.
Павел
И получается не ставя специально меняется функионал в ту или иную сторону
Павел
А еще прикол, что у меня он стоит, но при этом докблоки не читаются в моем кейсе))
Konstantin
в саджест исторически пишут тонну говна, я уверяю, ни один разработчик их не читает, их ценность околонулевая обычно, где-то рядом с баннером про соседнюю страну
Dmitry
Либо делаем пакет только с минимальным набором зависимостей как в Symfony, а остальное опциональное предлагаем в suggest. И получаем только то, что надо.
Konstantin
спасибо, кэп! но я думаю, что никто бы не умер, затащи они этот парсер прямой зависимостью, просто бы включали-отключали его в настройках
Павел
А еще прикол, что у меня он стоит, но при этом докблоки не читаются в моем кейсе))
@sc0rp10 Хотя я ошибся, видимо дело в нем, установил принудительно (до этого смотрел в lock файле), и сломалось там -где работало. Видимо во втором проекте, данный пакет подтягивается каким то пакетом
Павел
Короче спасибо большое за правильную наводку
Konstantin
так о чем и речь, да, что транзитивной зависимостью оно приходит в дев
Dmitry
Либо подключаем абсолютно всё как в валидаторе Laravel с: { name: illuminate/validation, require: { php, ext-json, egulias/email-validator, illuminate/container, illuminate/contracts, illuminate/support, illuminate/translation symfony/http-foundation, symfony/mime } } И получаем четыре тонны вещества, которого нам не нужно...
Konstantin
так о чем и речь, да, что транзитивной зависимостью оно приходит в дев
я помню чуть волосы из жопы не повыдергивал, дебажа
Павел
Конечно гениально выходит похоже: Сидишь пишешь, все ок, потом такой - а дайка я доку на нелмио буду писать (а он требует phpdocumentor/reflection-docblock:). И хлобысь из-за доки начал падать функционал.
Павел
Хотя возможно нелмио в проде и не нужен, но мало ли, какая нить открытая внешняя дока
Konstantin
я считаю в конфиге сериалайзера должен быть флаг "парсить докблоки", и если он включен - проверять наличие пакета
Dmitry
Либо подключаем абсолютно всё как в валидаторе Laravel с: { name: illuminate/validation, require: { php, ext-json, egulias/email-validator, illuminate/container, illuminate/contracts, illuminate/support, illuminate/translation symfony/http-foundation, symfony/mime } } И получаем четыре тонны вещества, которого нам не нужно...
...когда у support свои зависимости: { name: illuminate/support, require: { doctrine/inflector, illuminate/collections, illuminate/conditionable, illuminate/contracts, illuminate/macroable, nesbot/carbon, voku/portable-ascii }, } И так поставив валидатор скачали половину интернета.
Dmitry
я считаю в конфиге сериалайзера должен быть флаг "парсить докблоки", и если он включен - проверять наличие пакета
А если нет пакета, то что? Кинуть своё исключение? Тогда также упадёт на продакшене без пакета по --no-dev
Konstantin
А если нет пакета, то что? Кинуть своё исключение? Тогда также упадёт на продакшене без пакета по --no-dev
упадет с понятным сообщением, а не "мы вместо сущностей вам в массив молча напарсили"
Павел
@elisdn Мой кейс говорит об обратном. У меня дто, я десериализую [file=>uploadFile] на эту дто, ставлю док блок исключительно для дальнейшей типизации работы с дто. Специально не делаю строгую типизацию этого свойства, так как как раз начснает собирать через конструктор. Тут я ставлю нелмио доку, которая требует этот пакет по разборку док блоков и у меня падают эндпоинты.
Юра
Странности начинаюся что оно начинает собирать через конструктор
Dmitry
упадет с понятным сообщением, а не "мы вместо сущностей вам в массив молча напарсили"
Тогда да, это косяк бандла с молчаливым подключением нормалайзеров по тегам контейнера. При отдельном использовании компонента всё строго падает.
Павел
Странности начинаюся что оно начинает собирать через конструктор
Ну вот так работает сериалайзер) Наверное чтобы не похерить инварианты сущности, или сделать инициализацию правильную
Юра
Косяк по-любому. Дев зависимости не должны влиять на прод код
Павел
И опять таки, я ща не могу вырезать в легкую нелмио, и поэтому должен сидеть без какой либо вообще типизации этой проперти теперь
Юра
Напиши свой денормалайзер
Павел
Напиши свой денормалайзер
Варик, но гемор писать под ДТО денормалайзер.
Павел
С учетом того еще, что они через цепочку гоняются и это все замедляется в перспективе, хоть и спички
Юра
Я вообще считаю что сериалайзер должен работать через кодоген
Иван
и без сраного проламывания приватов через рефлексию
Dmitry
Косяк по-любому. Дев зависимости не должны влиять на прод код
Обратная сторона автоматики. Сделали как в Laravel молчаливый автоподхват компонентов, пытаясь избавить программиста от ручной настройки. А получили магическую непредсказуемость при отсутствии контроля.
Nikolay
Ага
Такое ....
Павел
Такое ....
Ну он и не юзается, кто то начал, потом кто-то забил. Но выпилить пакет просто так - не удается, ругается что где-то анотации юзаются из пакета. Так то решаемо конечно, но сам факт - херня какая то)))
Юра
Короче кому интересно делал рисерч. Ларавель примерно в три раза популярнее симфы. Но чисто в Америке
Юра
Без понятия )
Юра
Так что если кто планирует работать на амэрыку или канаду то тока ларавель
Павел
Короче кому интересно делал рисерч. Ларавель примерно в три раза популярнее симфы. Но чисто в Америке
Ну опять таки, больше вакансий, не значит что они лучше :) или что симфы нет вообще) С учетом того, что на симфе жопец то, когда проект в легаси и в объемы уходит, в ларке наверное вообще беда, с учетом возможности говнокода из всех щелей за счет фасадов. Не спорю что можно наверное писать и норм, но актив рекорд уже минуса
Юра
Там нету ОРМ?
Павел
https://stackoverflow.com/questions/33427109/memory-usage-goes-wild-with-doctrine-bulk-insert
Павел
Заюзал вот это но память все равно даёт течь
Павел
Куда копать не подскажите?
Nikolay
Куда копать не подскажите?
На сайте доктрины было похожее
Павел
Ща пересмотрю
Nikolay
Ща пересмотрю
Это не для миграции?
Павел
Да я с очередями решил не заморачиваться, принял файл и запустил консольку чтоб csv в таблицу тзагнать
Павел
А там логику записи надо менять
Юра
Преконвероируй цсв
Юра
А потом базой )
Павел
а так в лоб как я хочу нереально замутить?)
Nikolay
а так в лоб как я хочу нереально замутить?)
В миграциях больших данных не рекомендуется орм использовать от слова совсем, мало ли что у доктрины потечет
Юра
Ну ты можешь расчехлить xhprof и запрофайлерить
Юра
Возможно баг даже найдешь доктрины
Юра
А может у тебя что-то
Павел
Дело было не в бобине .... Скорее всего будет вот так)))
Kirill
Привет! Подскажите, можно ли из кода узнать, запущен ли он (скрипт) сейчас в консоли? А еще лучше, если можно узнать какой командой он запущен.
Юра
man pgrep
Konstantin
а я попробую рассказать как это канонично в линуксе решить
Kirill
Есть бандл, который логирует изменения в сущностях. Логируется следующая информация: object_class, object_id, data, blame_user. Я хочу доработать его и добавить информацию о том, какая команда изменила сущность. Потому что blame_user - это авторизованный пользователь, а если команда запускается по крону и какую-то сущность пересохраняет, то информации об этом сейчас нет
Konstantin
норм идея, но я бы делал так: пишу в $_SERVER['command_name'] имя текущей команды
Konstantin
и в том месте, что вставляет в таблицу, доставал бы это
Kirill
спасибо, попробую
Konstantin
тот путь, о котором вы пишете исходно - он точно гиблый, я вас уверяю. там просто море подводных камней и корнеркейсов, надо будет обработать сотни интересных ситуаций. и то не факт что достучитесь
Konstantin
примерно отсюда я бы начал
Konstantin
https://symfony.com/doc/current/components/console/events.html
Kirill
о, супер, спасибо!