Задать вопрос
  • Почему происходит откат изменений после выполнения merge request?

    @Vitsliputsli
    krosten92,
    тоже думал, что форсит. Но утверждает, что нет

    А зачем верить на слово? Откройте журнал git по ветке и проверьте, что действительно происходило, где был merge, а где rebase, или вообще reset.
    Если что, это делается так:
    git reflog show dev
  • Почему происходит откат изменений после выполнения merge request?

    @Vitsliputsli
    krosten92,

    Я так понимаю ему ничего не пишется, а pull делать религия не позволяет

    Это не религия, а банальная лень и наплевательство на чужой труд.
    Скорее всего он делает force push, и тупо перезаписывает историю. Защитите ветку от force push или бейте по рукам.
  • Миграция с Виндовс на Арч. Какие могут быть проблемы?

    @Vitsliputsli
    Drno, логически это теоретически, у меня, на практике, LTS Ubuntu подсыпал неожиданные баги регулярно в отличии от Арча. Debian стабилен, но слишком древнее ПО для рабочего компа. Хотя на сервер я тоже постремался бы ставить роллинг релизы, почемуто верится, что все ПО в дистрибутиве лучше тестируется.
    Арч ставится не намного сложнее, но нужно понимать, что делаешь. Поэтому и нет автоустановки, так сделано специально, если слишком сложно запустить несколько команд из консоли, то действительно не стоит его брать. Есть, конечно, всякие Manjaro, но чтото у их пользователей слишком часто возникают проблемы.
  • Почему скрипт bash выполняется несколько раз?

    @Vitsliputsli
    Т.е. скрипт находит новый файл, затем перезаписывает его, а значит скорее всего создает опять новый файл, и он опять попадает в скрипт как новый.
  • Знаю только Python и SQL. Нужно ли наращивать стек знаний перед попыткой смены работы?

    @Vitsliputsli
    paran0id,

    kafka - вещь узкоспециальная, а вот kubernetes точно лишним не будет

    kubernetes - вещь узкоспециальная, а вот kafka точно лишним не будет
  • Как составить SQL запрос для подставления значения по времени?

    @Vitsliputsli

    Задача видеть в каком статусе пришло то или иное сообщение

    Значит вам нужна связь между статусами и сообщениями, в описанной схеме ее пока нет.
  • Как автоматически подставлять значение в value?

    @Vitsliputsli
    tajfun_rt, Если я правильно догадался, то вы хотите вывести id будущей записи, которая еще не записана в БД. Тогда укажите СУБД, какую используете. Если в ней есть отдельно вынесенный sequence, то пользуйтесь им. Если нет, то несколько вариантов, которые приходят в голову:
    1) эмуляция sequence, т.е. прям в базе храните последний id (как вы и планировали), и при обращении высчитываете следующий и сохраняете (но нужно будет учитывать гонку);
    2) каждый раз налету получать последний id (опять же гонка);
    3) делать insert и использовать полученный id, а затем обогащать эту строку данными. Если допустимо по архитектуре и нет опасности большого кол-ва пустых строк, либо решите этот вопрос.
  • Как дождаться завершения процесса, запущенного через proc_open?

    @Vitsliputsli
    Евгений Обыкновенный,

    Работает нормально, но не очень хорошо делать активный цикл одижания.

    Что такое активный цикл ожидания?
    Вы сделали sleep, все время в нем указанное процессор может отдыхать или делать чтото иное. Было бы сложнее, если нужно чтото еще делать между проверками, а так все также как если бы это было асинхронно из коробки, только вручную.
  • Как правильно разбить массив на ключи и значения?

    @Vitsliputsli
    Лучше рассмотреть вариант использования json для хранения базе. Не нужно будет парсить вручную и нет проблемы использования запятой или знака равно в названиях (например "Зеленоград, Москва").
  • Как узнать сумму выброщенных чисел из массива?

    @Vitsliputsli
    muminwww, тем более важно, если изучаете. Вариант rPman гораздо эффективнее, т.к. затрат на него меньше. При малых числах это незаметно, но при больших разница будет существенной.

    1 вариант:
    $min = min($foo); // перебор всего массива 
    $max = max($foo); // перебор всего массива
    $fullRange = range($min, $max); // создание нового массива размером с первоначальный
    $missed = array_diff($fullRange, $foo); // вычисление расхождения массивов
    $sum = array_sum($missed); // перебор всего массива


    2 вариант:
    $n = max($foo); // перебор всего массива, а если массив отсортирован, то и этого не нужно
    $asum = ((1+$n)*$n)/2; // простые вычисления
    echo $asum-array_sum($foo); // перебор всего массива
  • Как получить константы в php из другого файла в классе?

    @Vitsliputsli
    Прочтите доку, как минимум это https://www.php.net/manual/ru/language.oop5.consta....
    А если не поможет покажите код.
  • Как преобразовать UNION-запрос в простой?

    @Vitsliputsli
    Отличия этого варианта от оригинального:
    - Не будут убраны дубликаты.
    - Будут потеряны SecondField, если FirstField тоже подходит.

    Если продолжать наркоманить, то можно сделать cross join с таблицей из двух строк 1 и 2, и на основе ее выбирать FirstField и SecondField. Но нужно придумать, как создать такую таблицу без union.
  • Как взаимодействовать с базой, если у тебя запущен вечный скрипт?

    @Vitsliputsli
    Лучше не ждать ошибку, а отключаться от СУБД при бездействии.
  • Уместно ли использования ассоциативной таблицы в нотации idef1x?

    @Vitsliputsli
    kashero, это понятно, но у вас эта связь есть в Продажах, зачем она еще и в Продажа_Лекарство?
  • Как запускать одну функцию для разных задач одновременно?

    @Vitsliputsli
    Slash,

    Крон запускается за счет посещения

    Расскажите, подробней, это как?

    Судя по описанию задачи, у вас 2 независимых действия почемуто влияют друг на друга, вызывая ошибки при параллельном выполнении. Если так, то вопрос не в том, как их запускать, а почему они зависимы, и решать надо эту проблему.
  • Как понять, что все сообщения в очереди обработаны?

    @Vitsliputsli
    Михаил Ливач,
    В моём случае остановка на 5 минут - не страшно

    Если чтото сможет диагностировать, что произошел сбой, тогда да. Но, лучше если такой сбой вообще невозможен.

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

    Опять же, сейчас так, но в будущем может изменится.

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

    @Vitsliputsli
    Михаил Ливач,
    сообщить брокеру, что задача готова, затем увеличить свой счётчик

    это плохой вариант, появляется вариант, когда задачи по факту выполнены, но весь процесс остановится, так как счетчик не заполнится полностью.

    если сумма счётчиков не меняется в течение какого-то времени, то спросить у брокера количество задач в очереди

    я так понимаю это не вариант, т.к. в очереди могут быть задачи из другой новой группы

    За это отвечает брокер - если по таймауту задача не подтверждена, она автоматически возвращается в очередь. Это была одна из причин, почему я выбрал beanstalk, а не Redis Pub/Sub ( у Redis сейчас заявлен новый механизм, Streams , но мне он показался сложнее )

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

    @Vitsliputsli
    Михаил Ливач,
    Этот момент мне неясен. В моём представлении, это так:
    1) есть некое оперативное хранилище ( например, Redis )
    2) Паблишер туда пишет: "я поставил N заданий". И закончил работу.
    3) Каждый Воркер в то же хранилище пишет свой инкрементный счётчик, сколько заданий он сделал.
    4) Менеджер работает параллельно воркерам и считает сумму их счётчиков. Как только сумма сошлась с числом от паблишера, все задания обработаны.
    Так?

    Можно так. В этой схеме слабое звено, что мы считаем кол-во выполненных заданий, а не знаем какие выполнены. Если поставим инкрементацию кол-ва выполненных до финализации задачи в очереди, то при сбоях в воркере (если он упал после инкрементации, но до финализации задачи) кол-во выполненных может быть больше реального кол-ва задач, некрасиво, но работу не нарушит. Можно фиксировать id выполненных задач, а не просто их считать, тогда не будет расхождений, но особой нужды наверное в этом нет.
    Надо учитывать, что когда происходит инкрементация кол-ва, фактически задача воркера уже выполнена, если он потом не сможет ее финализировать, а сделает это позже, это не важно. Т.е. повторное выполнение той же самой задачи воркером никак не должно нам мешать.
    Но лучше смотреть не на задачи в очереди, а на выполненную работу. Допустим задачи меняют данные в строчках таблицы, тогда добавляем к каждой строчке updated_at или version, а некий демон периодически или по сигналу проверяет, что какие-то строчки обновились и для них нужно выполнить какие-то действия. Т.е. опираться на бизнесовые изменения, а не на техническую очередь.

    не буду дальше позориться и рассказывать устройство, и так вижу, что тут коряво вышло

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

    Теперь вижу, что подход в целом неверный. Если я боюсь утечек памяти, надо было брать пример с Апача: Менеджер мониторит количество воркеров и запускает новые, если нужно, а воркер обрабатывает фиксированное число заданий ( тысячу, 10 тысяч ) и завершается. Если хочется принудельно завершить воркера, надо смотреть в сторону сигналов.

    Я бы не был столь категоричным. Прям менеджер воркеров, не для сбора инфы с воркеров, а который управляет ими, это не очень тривиальная штука. Самый простой и эффективный вариант - это запуск воркеров через systemd unit, там же прописать их перезапуск при сбое. Упадет воркер - не проблема, его перезапустят. Главное проработать возможные ошибки, если воркер вылетел на середине задачи, а затем начал ее сначала. Но это в любом случае должно быть.
    Я говорю про архитектуру, когда воркеры запущены постоянно, если нет задач, они простаивают. Их кол-во фиксированно и изменяется редко.

    скидки на товары

    обычно цена со скидкой высчитывается "на лету"
  • Функция str_replace() не работает?

    @Vitsliputsli
    JastaFly, он просто указал, как сделать правильно, чтобы не только решить текущую проблему, но и предотвратить проблемы в будущем. Если это сейчас слишком сложно, то "лечите" следствия, будет костыльно, но решит проблему.