加速Heroku的部署

时间:2013-01-17 02:13:51

标签: node.js heroku express npm

Heroku很棒。但每次我部署时,Heroku似乎都想重新下载并重建所有软件包。使用socket.iomailparser这需要大约3分钟。

有没有办法加快部署过程?有没有办法告诉Heroku它可以缓存这些项目?或者我可以上传预建的node_modules吗?

6 个答案:

答案 0 :(得分:9)

好像今天Heroku终于缓存node_modules文件夹了!

  

- - - - >删除匹配.slugignore模式的6个文件。

     

- - - - >已检测到Node.js应用

     

- - - - >请求的节点范围:0.10.x

     

- - - - >已解决的节点版本:0.10.22

     

- - - - >下载并安装节点

     

<强> -----&GT;从缓存中恢复node_modules

     

- - - - &GT;安装依赖项

     

- - - - &GT;修剪未使用的依赖项

     

<强> -----&GT;缓存node_modules目录以供将来构建

     

- - - - &GT;清理node-gyp和npm工件

现在我的建造时间就像3秒钟。

答案 1 :(得分:1)

我做的一件事就是将.slugignore文件添加到主文件夹并添加我不想运行应用程序的所有文件和文件夹。

.slugignore文件的示例内容:
工作
样机
* .PSD
* .pdf

答案 2 :(得分:1)

我有同样的问题(见Avoid npm refresh after every deployment on Heroku)。

Heroku强制下载/构建/等。序列,因为他们需要启动一个带有“空白平板”的应用程序:清理以前未删除的文件,将应用程序移动到另一台服务器,分配新的网络动态时等等。

问题显然是本机包和重新编译。对于所有仅限js的包,我使用我的项目提交它们,并从package.json中删除它们。它会增加几秒钟,但不会那么多。

我绝对可以预编译和提交本机模块(例如,我在Heroku上成功运行wkhtml2pdf,使用为linux-amd64编译的二进制文件),如果你可以访问Linux盒子(或VM)相同的配置 - 截至今天,Linux [...] 2.6.32-350-ec2 #57-Ubuntu SMP [...] x86_64 GNU/Linux

虽然我不推荐它作为最终解决方案,因为它有可能会在某一天中断 - 我认为heroku不会保证应用程序运行的平台。

答案 3 :(得分:1)

我遇到了同样的问题。

此处讨论如何缓存node_modules文件夹:https://github.com/heroku/heroku-buildpack-nodejs/pull/37

另一个想法:https://github.com/heroku/heroku-buildpack-nodejs/issues/25


我正在考虑一些解决方案。

  1. 在单独的分支机构中检入node_modules :核心Node.js维护者实际上建议将node_modules文件夹检入源代码管理中(对于应用,不是库)。我不喜欢这个。解决这个问题的方法可能是让一个单独的production分支具有不同的.gitignore文件,而不会忽略node_modules。如果要部署,只需从主服务器执行rebase,并且将检入node_modules。至少这可以使主分支免于依赖。

  2. preinstall脚本添加到package.json以下载压缩的依赖项zip :您还可以添加推送前git挂钩来捆绑您的依赖项并上传他们到S3。这可能会太慢了。

  3. 修改heroku-buildpack-nodejs :将未完成的拉取请求与node_modules缓存进行整合:

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

答案 4 :(得分:1)

好像最近在heroku-buildpack-nodejs取得了进展。

合并拉取请求后,您可以添加

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

heroku environment variables

目前,David Dollar的分叉存储库位于

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

将此作为BUILDPACK_URL,它应该缓存npm模块。 我尝试使用node.js 0.10.5a,npm version:1.3.5和.gitignore中的npm_modules。到目前为止似乎工作正常!

答案 5 :(得分:1)

查看新的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