akella.su
Статичные то можно и на клиенте, чем делать запрос на каждый заголовок
akella.su
Вот с динамичными данными на клиенте я хз, поэтому думаю создам эту таблицу и так работать буду
Михаил
Так я же спросил, они статичные или нет. Ты сказал что статичные
Ну ладно
akella.su
Неправильно понял, сорян, часть статична, часть динамично конечно
SK
никто там лексик не пробовал просто поставить ?
Nikolay
Привет, нужно для messenger написать кастомный мидлвар, причем, чтобы он срабатывал после обработки сообщений. В доке ничего по конфигам не нашел, может кто сталкивался?
Михаил
Nikolay
buses:
messenger.bus.default:
middleware:
- MyProcessMiddleware
Михаил
А, стоп скинь скрин мидлвары
Михаил
ща
Nikolay
Нашел такое на гитхабе https://github.com/symfony/symfony/issues/28568#issuecomment-423896908
Михаил
public function handle(Envelope $envelope, StackInterface $stack): Envelope
{
try {
return $stack->next()->handle($envelope, $stack);
} finnaly {
echo 'do job after';
}
}
Михаил
или без finnaly то есть записать результат предыдущей мидлвары в переменную, выполнить то что надо и вернуть результат
Михаил
ну как обратный обход дерева
Nikolay
Михаил
Ааа. я вспомнил - это роутер из другого фреймворка так работал. Точно. Не - самый лучший вариант это так как я показал
Михаил
finnaly если нужна гарантия. запись в переменную - если нужно только при успехе
Михаил
(киваю головой типо понял)
Андрей
Подскажите.
В отдельном Докер контейнере запускается консольная команда, которая в постоянном цикле (while(true)), через определенный промежуток времени (sleep) выполняет определенные действия, в частности, обращается к БД.
С каждой итерацией увеличивается объем памяти, потребляемой данным контейнером.
Опытным путем вычислил, что память ест вот этот код:
$repository = $this->em->getRepository(PmProfileAccount::class);
$query = $repository->createQueryBuilder('pa')
->select('pa.id')
->where('pa.profile = :profile')->setParameter('profile', $profileId)
->andWhere('pa.deleted = :deleted')->setParameter('deleted', false)
->andWhere('pa.blocked = :blocked')->setParameter('blocked', false)
->getQuery()
->useQueryCache(false);
$accountsIds = $query->getArrayResult();
$this->em->clear();
Что можно сделать?
Андрей
Если получать данные из репозитория:
$this->findBy(['profile' => $profileId, 'deleted' => false, 'blocked' => false], ['id' => 'ASC']);
также съедает память.
Вадим
Вадим
doctrine_close_connection
kakoi-to-noob
Подскажите.
В отдельном Докер контейнере запускается консольная команда, которая в постоянном цикле (while(true)), через определенный промежуток времени (sleep) выполняет определенные действия, в частности, обращается к БД.
С каждой итерацией увеличивается объем памяти, потребляемой данным контейнером.
Опытным путем вычислил, что память ест вот этот код:
$repository = $this->em->getRepository(PmProfileAccount::class);
$query = $repository->createQueryBuilder('pa')
->select('pa.id')
->where('pa.profile = :profile')->setParameter('profile', $profileId)
->andWhere('pa.deleted = :deleted')->setParameter('deleted', false)
->andWhere('pa.blocked = :blocked')->setParameter('blocked', false)
->getQuery()
->useQueryCache(false);
$accountsIds = $query->getArrayResult();
$this->em->clear();
Что можно сделать?
$this->em->clear(); вот этот код очищает состояніе entity manager, в селекте скалярные величины, что дальше с $accountsIds происходит?
Vlad
Vlad
ты можешь посмотреть где растет память с помощью qcachegrind и подобных программ
Андрей
Vlad
Установи себе memprof в контейнер
https://github.com/arnaud-lb/php-memory-profiler
в конце комманда
memprof_dump_callgrind(fopen("/var/www/tmp/callgrind." . time(), "w"));
Ну или сам выберешь название файла
И открываешь в qcachegrind
Андрей
Андрей
Rus
Почему цикл, а не крон, например?
Andrii
Подскажите.
В отдельном Докер контейнере запускается консольная команда, которая в постоянном цикле (while(true)), через определенный промежуток времени (sleep) выполняет определенные действия, в частности, обращается к БД.
С каждой итерацией увеличивается объем памяти, потребляемой данным контейнером.
Опытным путем вычислил, что память ест вот этот код:
$repository = $this->em->getRepository(PmProfileAccount::class);
$query = $repository->createQueryBuilder('pa')
->select('pa.id')
->where('pa.profile = :profile')->setParameter('profile', $profileId)
->andWhere('pa.deleted = :deleted')->setParameter('deleted', false)
->andWhere('pa.blocked = :blocked')->setParameter('blocked', false)
->getQuery()
->useQueryCache(false);
$accountsIds = $query->getArrayResult();
$this->em->clear();
Что можно сделать?
Думаю, что result все ещё в доктрине сидит и gc его не чистит. Хотя можно попробовать запустить его принудительно gc_collect_cycles()
Андрей
Почему цикл, а не крон, например?
Раньше был крон.
Там минимальное время запуска раз в минуту.
Нужно было чаще запускать.
+ были какие-то сложности с ci/cd у девопсов
Dmitry
Андрей
Viktor
Можно использовать https://symfony.com/doc/current/scheduler.html
В частности https://symfony.com/doc/current/scheduler.html#periodical-triggers
Андрей
Михаил
Есть ещё варик - запускать консольные команды с флагом
—no-debug
Vlad
Vlad
Для этого есть другие инструменты, симфонячий дебаг для локальной разработки
Михаил
Qa, препрод, локалка
Дебаг врубает расширеннные логи, логи запросов
Михаил
Имхо проще флагом вырубать. А на проде уже рубить полностью
Михаил
Des1roer
привет всем. кто нибудь использует докер десктоп на винде?
Des1roer
проблема - в убунту странциа отдается за 50 мс. в винде за 14 секунд
Максим
Максим
попробуй мутаген
Максим
или rsync решения
Des1roer
а подробнее?
Максим
а подробнее?
сейчас вспомню чего и как, я делал все это в 2018-2019
Максим
короче, если у вас docker-compose
то начните с монтирования volume
когда вы монтируете том, например так
- app:app то вы монтируете всю папку с постоянным обнволением
а можно задать приоритет
Максим
Максим
через дополнительный флаг
Максим
это уже улучшить
Vlad
Максим
а ну да, там же в винде есть линукс вроде как несколько лет
Максим
кстати, на маке сейчас есть с этим проблемы по дефолту? давно в пхп не залезал
Vlad
угу, ставишь дебиан, туда закидываешь проект, указываешь в десктопе юзать дебиан, запускаешь проект, профит
Des1roer
не понял. файл шаринг нужен?
Vlad
Все еще не так, как на линуксе из-за наличия вм, но ситуация кратно лучше
Максим
Vlad
Vlad
все будет нормально
Максим
а то как вспомню былые времена
Максим
обмазан допконфигами и руби утилиты эти
Des1roer
а если без десктоп, а просто из консоли повызывать не будет лучше?
Des1roer
нет разницы с десктоп или из консоли
Dmitry
что про SonataAdminBundle думаете?
Null