【发布时间】:2017-11-25 02:28:20
【问题描述】:
我正在尝试部署一个简单的应用程序,没什么大不了的,但我不断收到此错误
错误 R10(启动超时)-> Web 进程在启动后 60 秒内未能绑定到 $PORT
即使 Heroku 在 60 秒过去之前就完成了部署。我也在我的服务器中设置了 process.env.PORT。我在 Heroku 上有一些应用程序,所以我熟悉部署。
我事先制作了服务器包文件 (src/build/bundle.js) 和客户端包文件 (src/dist/bundle.js),然后将所有内容推送到 Heroku。在 package.json 中有一个启动脚本应该只是启动服务器。
在本地一切正常。
我正在使用服务器端渲染,我在客户端分离了 bundle、vendor 和 extractt css。在服务器端,我还捆绑文件并使用 html-webpack-plugin。不知道是否有任何联系,不应该。
prodServer.js
const APP_PORT: number = conf.APP_PORT
const PORT: any = process.env.PORT || APP_PORT
const app: Express = new Express()
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'ejs')
app.use(Express.static(path.join(__dirname, '../', 'dist'), {maxAge: '1y'}))
app.use((req: Object, res: Object, next: () => void): void => {
res.set('Cache-Control', 'no-cache')
return next()
})
app.get('*', (req: Object, res: Object) => {
res.render('index', {app: req.body, webpack: req.chunk})
})
app.listen(PORT, () => {
console.log(`
Express server is up on port ${PORT}
Production environment
`)
})
package.json
{
"name": "QR",
"version": "1.0.0",
"description": "Q",
"main": "prodServer.js",
"license": "MIT",
"scripts": {
"clean": "rm -rf ./src/dist && rm -rf ./src/build",
"build-client": "cross-env NODE_ENV=production webpack -p --config webpack.config.prod.js",
"build-server": "cross-env NODE_ENV=production webpack -p --config webpack.config.server.prod.js",
"start": "cross-env NODE_ENV=production node ./src/build/bundle.js"
},
...
【问题讨论】:
-
嗨,斯科特。如何获取端口,Heroku 不通过 process.env.PORT 使用它自己的。我在生产版本中提到的唯一其他端口是 localhost:3001 用于我的 webpack 包中的 publicPath。 EDIT 实际上我什至没有在生产中使用该端口。我通过脚本标记直接在我的html中引用捆绑文件。
-
在 PORT 上用 var 代替 const
-
谢谢斯科特。我试过了,但仍然没有运气。仍然得到同样的错误。
标签: node.js heroku deployment