Heroku相比于其他的云平台,有非常便捷的功能。比如相比AWS,不需要去设置各种用户组,启动一台ec2,然后部署代码。
很简单,只需要创建一个app,连接github即可部署。
那么问题来了
前阵子部署了一个React的app,区区没几行,想学习一些阿里巴巴的Ant Design UI。结果你猜怎么着,app直接崩了……
不是吧哥们?一开始我以为哪里设置错了,好奇的我打开log一看,好家伙,直接内存耗尽,整个进程被Heroku砍掉了……
(当时我用了一种比较骚的方法,通过django加载build好的react app。额外多了一步而且需要维护两种代码,非常不方便。具体的我打算之后也总结一下。)
原因其实很简单
现在回看这个事情,其实不复杂。网上答案都有现成的:很大概率这种情况下跑的react app,用的是dev server。
是的,就是这么简单,告诉Node,跑build好的react。没错,这么一看回过味来了,这件事其实和前面提到的利用django来加载一个意思,只是人家React早就支持了。
具体操作
- 安装 serve
npm install serve
- 修改package.json文件,找到start部分
"scripts": {
...
"start": "react-scripts start",
...
改成
"scripts": {
...
"start": "serve -s build",
...
- 对于Heroku来说,此时你应该已经有Procfile并且已经设置好了,如果没有那么我的Procfile是
web: node --optimize_for_size --max_old_space_size=460 server.js
web: npm start
本质上调用了 npm start
运行!
流畅的一批,再也没有OOM了,还少维护一个repo (django)。此外相比使用django,少了运行django的开销。内存从600MB直接降到不到60MB。