加快部署Heroku

Heroku太棒了 但每次我部署,Heroku似乎喜欢重新下载和重build所有的软件包。 使用socket.iomailparser这需要大约3分钟。

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

看来Heroku今天终于caching了node_modules文件夹!

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

—–>检测到Node.js应用程序

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

—–>parsing节点版本:0.10.22

—–>下载并安装节点

—–>从caching中恢复node_modules

—–>安装依赖关系

—–>修剪未使用的依赖关系

—–>caching未来版本的node_modules目录

—–>清理node-gyp和npm文件

现在build造时间对我来说就像3秒钟。

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

.slugignore文件的示例内容:
加工
样机
* .PSD
* .PDF

我有同样的问题(请参阅在Heroku上每次部署后避免npm刷新 )。

Heroku强制下载/编译/等。 因为他们需要使用“空白页面”来启动应用程序:清除以前的未删除文件,将应用程序移动到另一台服务器时,分配新的Web dynos等。

这个问题很明显,使用本地软件包,并重新编译。 对于所有js-only软件包,我将它们提交给我的项目,并从package.json中删除它们。 它获得了几秒钟,但不是那么多。

如果能够访问具有相同configuration的Linux机器(或虚拟机),我当然可以预编译并提交本地模块(我成功地在Heroku上运行wkhtml2pdf,例如,为linux-amd64编译的二进制文件) – 截至今天Linux [...] 2.6.32-350-ec2 #57-Ubuntu SMP [...] x86_64 GNU/LinuxLinux [...] 2.6.32-350-ec2 #57-Ubuntu SMP [...] x86_64 GNU/Linux

虽然我不会推荐它作为一个明确的解决scheme,因为它可能会有一天打破 – 在我看来,heroku并没有保证平台上的应用程序运行。

我遇到了同样的问题。

关于cachingnode_modules文件夹的一些讨论: https : //github.com/heroku/heroku-buildpack-nodejs/pull/37

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


我正在考虑一些解决scheme。

  1. 在单独的分支中检查node_modules :核心Node.js维护者实际上build议将node_modules文件夹检入源代码pipe理(对于应用程序而不是lib)。 我不喜欢这个。 解决这个问题的方法可能是使用不同的.gitignore文件,而不忽略node_modules 。 当你想部署时,只需从你的master进行rebase, node_modules将被签入。至less这样可以让你的master分支免于依赖。

  2. package.json添加一个preinstall脚本来下载压缩的依赖关系zip :您还可以添加一个预先推送的git钩子来捆绑您的依赖关系并将其上传到S3。 这可能会太慢,但。

  3. 修改heroku-buildpack-nodejs :将未完成的请求与node_modulescaching集成:

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

似乎最近在heroku-buildpack-nodejs上已经取得了进展。

一旦pull请求被合并,你可以添加

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

到你的heroku环境variables 。

就目前而言,David Dollar的分叉版本库已经上市了

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

有了这个BUILDPACK_URL它应该cachingnpm模块。 我尝试了node.js 0.10.5a,npm版本:1.3.5和.gitignore npm_modules。 Tt似乎工作得很好迄今!

查看新的Heroku Node.js buildpack的这个分支,现在处于testing阶段,它支持在构build之间进行caching的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