Ускорить развертывание на Heroku

Героку здорово. Но каждый раз, когда я развертываю, Heroku, похоже, хочет перезагрузить и перестроить все пакеты. С socket.io и mailparser это занимает около 3 минут.

Есть ли способ ускорить процесс развертывания? Есть ли способ сказать Heroku, что он может кэшировать эти предметы? Или я могу загрузить предварительно построенный node_modules?

Ответ 1

Похоже, что на сегодняшний день Heroku, наконец, кэширует папку node_modules!

----- > Удаление 6 файлов, соответствующих шаблонам .slugignore.

----- > Node.js обнаружено приложение

----- > Запрошенный node диапазон: 0.10.x

----- > Решенная версия node: 0.10.22

----- > Загрузка и установка node

----- > Восстановление node_modules из кеша

----- > Установка зависимостей

----- > Обрезка неиспользуемых зависимостей

----- > Кэширование node_modules для будущих построек

----- > Очистка артефактов node -gyp и npm

Время сборки похоже на 3 секунды для меня.

Ответ 2

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

Пример содержимого файла .slugignore:
работая
макеты
*.psd
*.pdf

Ответ 3

У меня был тот же вопрос (см. Избегайте обновления npm после каждого развертывания на Heroku).

Heroku заставляет загрузить /build/etc. потому что им нужно запустить приложение с "чистым списком": очистить предыдущие восстановленные файлы, когда они перемещают ваше приложение на другой сервер, когда вы назначаете новые веб-диноды и т.д.

Проблема явно связана с собственными пакетами и перекомпиляцией. Для всех пакетов js-only я передаю их с моим проектом и удаляю их из package.json. Он набирает несколько секунд, но не так много.

Я бы наверняка смог предварительно скомпилировать и перенести собственные модули (я успешно запускаю wkhtml2pdf на Heroku, например, с двоичным кодом, скомпилированным для linux-amd64), если вы получаете доступ к ящику Linux (или VM) с помощью та же конфигурация - на сегодняшний день, Linux [...] 2.6.32-350-ec2 #57-Ubuntu SMP [...] x86_64 GNU/Linux.

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

Ответ 4

Я столкнулся с той же проблемой.

Некоторое обсуждение здесь о кешировании папки node_modules: https://github.com/heroku/heroku-buildpack-nodejs/pull/37

Другая идея: https://github.com/heroku/heroku-buildpack-nodejs/issues/25


Сейчас я думаю о нескольких решениях.

  • Проверить node_modules в отдельной ветке. Ядро Node.js-разработчики фактически рекомендуют проверять в папке node_modules исходный элемент управления (для приложений, а не для lib), Мне это не нравится. Способ обойти его может иметь отдельный ветвь production с другим .gitignore файлом, который не игнорирует node_modules. Если вы хотите развернуть, просто выполните переустановку с вашего мастера и node_modules будет проверяться. По крайней мере, это не позволяет вашей основной ветке быть свободным от зависимостей.

  • Добавьте preinstall script в package.json для загрузки сжатой зависимости zip. Вы также можете добавить крюк pre-push git для объединения ваших зависимостей и загрузки их к S3. Это, вероятно, будет слишком медленным, хотя.

  • Изменить heroku-buildpack-nodejs: объединить выдающийся запрос на тягу с кешированием node_modules:

    heroku config:set BUILDPACK_URL=https://github.com/opdemand/buildpack-nodejs.git

Ответ 5

Похоже, что недавно был достигнут прогресс в heroku-buildpack-nodejs.

После объединения запроса на вытягивание вы можете добавить

heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs

к переменным окружения heroku.

В настоящее время резервное хранилище David Dollar доступно в

https://github.com/ddollar/heroku-buildpack-nodejs

При этом в качестве BUILDPACK_URL он должен кэшировать модули npm. Я попробовал его с node.js 0.10.5a, версия npm: 1.3.5 и npm_modules в .gitignore. Tt, похоже, отлично работает до сих пор!

Ответ 6

Откроем эту ветку нового Heroku Node.js buildpack, теперь в бета-версии, которая поддерживает node_modules кеширование между сборками:

https://github.com/heroku/heroku-buildpack-nodejs/tree/diet

Чтобы использовать его:

heroku config:set BUILDPACK_URL=https://github.com/heroku/heroku-buildpack-nodejs#diet -a my-node-app
git commit -am "fakeout" --allow-empty
git push heroku