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早就支持了。

具体操作

  1. 安装 serve
npm install serve
  1. 修改package.json文件,找到start部分
"scripts": {
   ...
   
    "start": "react-scripts start",
    
    ...

改成

"scripts": {
   ...
   
    "start": "serve -s build",
    
    ...
  1. 对于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。