加快部署Heroku
Heroku太棒了 但每次我部署,Heroku似乎喜欢重新下载和重build所有的软件包。 使用socket.io
和mailparser
这需要大约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/Linux
, Linux [...] 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。
-
在单独的分支中检查
node_modules
:核心Node.js维护者实际上build议将node_modules
文件夹检入源代码pipe理(对于应用程序而不是lib)。 我不喜欢这个。 解决这个问题的方法可能是使用不同的.gitignore
文件,而不忽略node_modules
。 当你想部署时,只需从你的master进行rebase,node_modules
将被签入。至less这样可以让你的master分支免于依赖。 -
在
package.json
添加一个preinstall
脚本来下载压缩的依赖关系zip :您还可以添加一个预先推送的git钩子来捆绑您的依赖关系并将其上传到S3。 这可能会太慢,但。 -
修改
heroku-buildpack-nodejs
:将未完成的请求与node_modules
caching集成: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
- AngularJS无法加载ng-view inti index.html
- app.configure(function){} typeerror undefined不是一个函数
- Angular JS Express JS File Upload抛出错误,undefined不是函数
- 如何从Mongoose查询返回值
- 使用ExpressJet,使用NodeJS从MongoDB中检索数据
- 在nodejs中,如何停止FOR循环直到mongodb调用返回
- 在mongodb中插入数据时添加一个条件
- PassportJs的passport.session()与file upload冲突 – 不会写入文件
- 通过ObjectID express js查找用户