• Почему Laravel Schedule при задании интервала менее минуты скрипт пропускает минуту?

    @alexsmirnovdotcom Автор вопроса
    Как видно из логов, команда запускается только каждую вторую минуту...

    \App\Console\Kernel.php:
    protected function schedule(Schedule $schedule): void
        {
            Log::debug('SCHEDULE RUN');
            $schedule->job(new SyncChangesFrom1C)->everyTenSeconds();
        }


    [2023-12-25 08:22:01] local.DEBUG: SCHEDULE RUN
    [2023-12-25 08:24:00] local.DEBUG: SCHEDULE RUN
    [2023-12-25 08:26:00] local.DEBUG: SCHEDULE RUN
    [2023-12-25 08:28:00] local.DEBUG: SCHEDULE RUN
    Написано
  • Почему Laravel Schedule при задании интервала менее минуты скрипт пропускает минуту?

    @alexsmirnovdotcom Автор вопроса
    Всё что есть из логов указано в вопросе, больше ничего нет...
    Ни ошибок, ни других сообщений.

    Подозреваю что скрипт не завершается к моменту новой попытки запуска и поэтому крон пропускает его запуск на минуту.
    Но как это выявить?
    Написано
  • Почему Laravel Schedule при задании интервала менее минуты скрипт пропускает минуту?

    @alexsmirnovdotcom Автор вопроса
    Понятно что можно сделать тоже самое и по факту внутри там такой же бесконечный цикл крутится)
    Но раз уж есть возможность из коробки, почему бы ей и не пользоваться?

    Проблема проявляется даже если в SyncChangesFrom1C::handle() ничего не происходит...

    И хочется понять, что конкретно заставляет cron пропустить очередной запуск artisan schedule:run
    Написано
  • Почему nginx возвращает ответ вместе с телом запроса?

    @alexsmirnovdotcom Автор вопроса
    Запрос всегда один и тот же с пустыми данными, т.е. я ожидаю получить ошибку валидации во всех случаях, но половина ответов приходит с ошибкой, в код 200 и в теле ответа содержится и тело запроса (в комментариях к вопросу дополнял что отправляю и получаю)
    Написано
  • Почему nginx возвращает ответ вместе с телом запроса?

    @alexsmirnovdotcom Автор вопроса
    Возможно причина в php-fpm, т.к. если запустить php artisan serve, то все становится идеально...

    #EXPOSE 9000
    #CMD ["php-fpm"]

    EXPOSE 9000
    CMD php artisan serve --host 0.0.0.0 --port 9000
    Написано
  • Почему nginx возвращает ответ вместе с телом запроса?

    @alexsmirnovdotcom Автор вопроса
    на всякий еще Dockerfile для api:
    FROM php:8.2-fpm
    
    ARG user
    ARG uid
    
    # Install system dependencies
    RUN apt-get update && apt-get install -y \
        git \
        curl \
        libpng-dev \
        libonig-dev \
        libxml2-dev \
        zip \
        unzip \
        libzip-dev \
        libmagickwand-dev \
        mariadb-client \
        cron
    
    # Clear cache
    RUN apt-get clean && rm -rf /var/lib/apt/lists/*
    
    RUN pecl install imagick \
        && docker-php-ext-enable imagick
    
    #RUN docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg
    #RUN #docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
    
    # Install PHP extensions
    RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl bcmath gd
    
    
    # Get latest Composer
    COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
    
    COPY ./src/api /var/www/api
    
    RUN adduser $user
    
    # Create system user to run Composer and Artisan Commands
    RUN chown -R $user:$user /var/www/api
    
    RUN usermod -aG www-data $user
    
    RUN chmod -R g+rx /var/www/api/public
    
    USER $user
    
    # Set working directory
    
    WORKDIR /var/www/api
    
    RUN composer install
    
    #
    EXPOSE 9000
    CMD ["php-fpm"]
    Написано
  • Почему nginx возвращает ответ вместе с телом запроса?

    @alexsmirnovdotcom Автор вопроса
    Код метода в контроллере:
    public function login(LoginRequest $request): UserAccountResource
        {
            $authData = $request->validated(['login', 'password']);
            $authData['banned_at'] = null;
    
            $isAuthenticated = Auth::attempt(
                credentials: $authData,
                remember: $request->validated('is_remember')
            );
    
            if (!$isAuthenticated) {
                abort(401, __('auth.failed'));
            }
    
            $request->session()->regenerate();
    
            $user = Auth::user();
    
            return UserAccountResource::make($user);
        }


    Тело запроса:
    {"login":"","password":"","is_remember":true}
    Написано
  • Vue 3. Как лучше встроить модальное окно для каждого элемента из списка?

    @alexsmirnovdotcom Автор вопроса
    Adamos, Теперь понял.
    Но мне кажется это гораздо сложнее будет в плане реализации адаптивности и в конечном итоге если нужны маленькие экраны или мобилки, то все равно все придет к модалкам.
    Понятно, что для маленьких форм можно и так сделать, но если у каждой сущности большые формы, с табами и прочим, то проще сразу использовать модалки или теже самые табы (более глобальные)
  • Vue 3. Как лучше встроить модальное окно для каждого элемента из списка?

    @alexsmirnovdotcom Автор вопроса
    Adamos, если честно не очень пока представляю, что вы имеете ввиду под закрываемыми вставками?
    Есть ли у вас визуальные / схематичные примеры, или в какую сторону гуглить?
  • Vue 3. Как лучше встроить модальное окно для каждого элемента из списка?

    @alexsmirnovdotcom Автор вопроса
    Имелась ввиду ситуация, когда например у нас есть допустим счет, и в нем есть такой же мини список, например прошлых счетов этого контрагента (объединенных одним договорм допустим).
    И нам нужно во время работы с текущим счетом, открыть другой счет, не закрывая текущий.
    Открыли еще один документ сверху, что-то посмотрели / поработали, закрыли.
    И тот документ который уже был открыт до этого так и должен остаться открытым и никак не измениться / загрузиться заново.

    Или в списке пользователей, открыли профиль в модалке, а у него например есть ссылка на руководителя которого тоже нужно открыть просто поверх текущего, а не вместо него.

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