@mixejuxix

Как в nuxt организовать «режим обслуживания»?

Привет! У нас есть проект на nuxt
Периодически мы обновляем его путем пуша изменений на гитлаб и выполения примерно такой команды по средствойм CI
git checkout master && git pull origin master && yarn run build && pm2 restart nuxt-project
Во время процесса пересборки проект ведет себя неадекватно, ну что собственно логично

Подскажите, пожалуйста, как бы организовать некий автоматический "режим обслуживания"?
Что бы при обновлении все, находящиеся в адмике клиенты, получили бы оверлей, блокирующий интерфейс
И что бы после перезапуска этот оверлей автоматически убирался?

На любой ajax-запрос можно отдавать ответ о том что сайт в режиме обслуживания, к примеру используя middleware в laravel

if($isMaintenanceMode)
    return response('Service Temporarily Unavailable', 503);


В axios я могу перехватить 503 ошибку:

export default function ({ $axios, redirect }) {
  $axios.onError((request, error) => {
    const code = parseInt(error.response && error.response.status)
    if (code === 503) {
      console.log('503')
    }
  })
}


Но такой перехват хотелось бы сделать синхронным - приостанавливать приложение при получении 503 кода

К примеру вот такой сценарий, в котором мы из админки сохраняем пост, а потом получаем список всех постов:

await axios.post('/content', {title: 'test', content: 'content'}) //Сохраняем пост
/*Если тут получаем 503 код:
1 Приостанавливаем все остальное
2 Отображаем оверлей с сообщением что необходимо подождать
3 Начинаем повторять предыдущий запрос, пока не получим код, отличный от 503
4 При получении кода 200 убираем оверлей, продолжаем выполнение приложения */
await axios.get('/content') //Получаем список постов


Возможно у кого нибудь есть мысли на счет этого?
  • Вопрос задан
  • 140 просмотров
Пригласить эксперта
Ответы на вопрос 1
bingo347
@bingo347
Crazy on performance...
Делать сборку в папке отличной от папки прода, если сборка занимает дольше 200мс (у nuxt она всегда дольше будет...), а после сборки синкать в прод папку.

Например у меня:
generate собирает в папку dist, а nginx смотрит на папку dist-public
в pregenerate таске npm я спокойно делаю rm -rf ./dist
в postgenerate таске npm я делаю rsync -rd --delete dist/ dist-public
Как итог, пока идет сборка - на проде старая версия, когда сборка завершилась rsync делает хардлинки, что происходит очень быстро и на проде оказывается почти моментально новая версия
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы