socket.io
и mailparser
это занимает около 3 минут.
Есть ли способ ускорить процесс развертывания? Есть ли способ сказать Heroku, что он может кэшировать эти предметы? Или я могу загрузить предварительно построенный node_modules
?
socket.io
и mailparser
это занимает около 3 минут.
Есть ли способ ускорить процесс развертывания? Есть ли способ сказать Heroku, что он может кэшировать эти предметы? Или я могу загрузить предварительно построенный node_modules
?
Похоже, что на сегодняшний день Heroku, наконец, кэширует папку node_modules
!
----- > Удаление 6 файлов, соответствующих шаблонам .slugignore.
----- > Node.js обнаружено приложение
----- > Запрошенный node диапазон: 0.10.x
----- > Решенная версия node: 0.10.22
----- > Загрузка и установка node
----- > Восстановление node_modules из кеша
----- > Установка зависимостей
----- > Обрезка неиспользуемых зависимостей
----- > Кэширование node_modules для будущих построек
----- > Очистка артефактов node -gyp и npm
Время сборки похоже на 3 секунды для меня.
Одна вещь, которую я сделал для ускорения процесса, заключалась в том, чтобы добавить файл .slugignore в основную папку и добавить все файлы и папки, которые я не хотел запускать.
Пример содержимого файла .slugignore:
работая
макеты
*.psd
*.pdf
У меня был тот же вопрос (см. Избегайте обновления 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
.
Хотя я бы не рекомендовал его в качестве окончательного решения, поскольку он, вероятно, однажды сломается - мне не кажется, что герой гарантирует платформу, на которой работает приложение.
Я столкнулся с той же проблемой.
Некоторое обсуждение здесь о кешировании папки 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
Похоже, что недавно был достигнут прогресс в 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, похоже, отлично работает до сих пор!
Откроем эту ветку нового 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