Как вы думаете, Трэвис медленнее запускает сборку ember? Может это твоя вина?

Сегодня мы потерпели полный провал в процессе сборки. Мы поступили правильно, мы все прекратили то, что делали, чтобы это исправить.

Проблема заключалась в том, что сборка дошла до определенного момента в Travis, а затем начала замедляться. Это происходило около недели, но мы предположили, что что-то происходит с самим Трэвисом.

Здесь есть небольшая предыстория, мы сталкивались с аналогичными проблемами в прошлом и думали, что это могла быть проблема с PhantomJS. Мы думали, что использование firefox может быть решением, и какое-то время это было так. Но потом мы столкнулись с той же проблемой, хотя осталась еще одна карточка «Выйти из тюрьмы», верно? Хром.

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

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

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

В конце концов мы соединили все части головоломки и обнаружили, что мы создали эту проблему, создав собственный помощник по тестированию, который все тесты импортировали, вместо использования по умолчанию moduleForAcceptance. Мы добавили некоторые важные для нас вещи и вызвали Ember.run (this.application, 'destroy'); но, что критически важно, мы не вызывали destroyApp помощник. Это помощник, созданный ember-cli, чтобы позволить надстройкам добавлять функции, которые должны выполняться при завершении работы приложения. Когда мы установили mirage и добавили строку server.shutdown из своего плана в помощник destroyApp, но его не называли. Из-за этого каждый тест использовал ресурсы, а не каждый тест, начиная с чистого листа. Проблема возникала только тогда, когда у Трэвиса заканчивались ресурсы, то же самое происходило локально, но всегда было достаточно доступных ресурсов и, следовательно, никаких проблем.

У вас могут быть такие вещи в вашей собственной кодовой базе, и я думаю, что важно, что мы узнали сегодня, было понять, где используются части ember-cli, и когда мы делаем что-то неидиоматическое, убедитесь, что мы все еще правильно маршрутизируем поток выполнения после того, как мы Выполнено. В этом случае вызывайте помощник destroyApp после каждого теста!