我正在部署到 Heroku,并且在package.json
包含了以下脚本:
"scripts": {
"heroku-postbuild": "yarn run build"
"start": "NODE_ENV=production node build/server.js"
}
不幸的是, PORT
变量在构建时是未知的,而是在运行时由 Heroku 分配,并且由于 razzle 需要在构建时知道端口,这意味着我必须在启动服务器之前进行构建。 考虑到这一点,我尝试将脚本更改为如下所示:
"scripts": {
"start": "NODE_ENV=production yarn run build && node build/server.js"
}
不幸的是,这花费了太长时间并在 60 秒 Heroku 超时后绑定:
2017-09-06T01:23:13.536789+00:00 app[web.1]: 编译客户端...
2017-09-06T01:23:14.395857+00:00 heroku[web.1]: 错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT
2017-09-06T01:23:14.395963+00:00 heroku[web.1]:使用 SIGKILL 停止进程
2017-09-06T01:23:14.499913+00:00 heroku[web.1]:进程以状态 137 退出
2017-09-06T01:23:14.509625+00:00 heroku[web.1]:状态从开始变为崩溃
有没有办法在构建时不需要端口? 为什么需要它呢?
您可以使用razzle-heroku :) 它扩展了默认的 razzle 配置,使其适用于 heroku。
啊啊,不知道,谢谢指点! 如果我已经有了带有自定义modify
函数的razzle.config.js
,有没有办法在使用 razzle-heroku 的同时仍然可以使用它?
// razzle.config.js
const razzleHeroku = require("razzle-heroku")
module.exports = {
modify: (config, {target, dev}, webpack) => {
config = razzleHeroku(config, {target, dev}, webpack)
// do something to config
return config
},
}
也许是这样的?
最有用的评论
也许是这样的?