Heroku报错 Web process failed to bind to $PORT within 60 seconds of launch

错误描述

如果设置的端口号小于1000就会报错没有权限

2022-03-29T10:23:16.651636+00:00 heroku[web.1]: State changed from crashed to starting
2022-03-29T10:23:28.994173+00:00 heroku[web.1]: Starting process with command `python /code/server3.py`
2022-03-29T10:23:30.091143+00:00 app[web.1]: Traceback (most recent call last):
2022-03-29T10:23:30.091204+00:00 app[web.1]: File "/code/server3.py", line 247, in <module>
2022-03-29T10:23:30.091205+00:00 app[web.1]: serverSocket.bind(("127.0.0.1", serverPort))
2022-03-29T10:23:30.091208+00:00 app[web.1]: PermissionError: [Errno 13] Permission denied
2022-03-29T10:23:30.234919+00:00 heroku[web.1]: Process exited with status 1
2022-03-29T10:23:30.279569+00:00 heroku[web.1]: State changed from starting to crashed

如果将端口号设置为8080,就会导致在60秒内连接不上

2022-03-29T10:53:34.400924+00:00 heroku[web.1]: State changed from crashed to starting
2022-03-29T10:53:49.432473+00:00 heroku[web.1]: Starting process with command `python /code/server3.py`
2022-03-29T10:53:33.432308+00:00 app[api]: Release v9 created by user ***@icloud.com
2022-03-29T10:53:33.432308+00:00 app[api]: Deployed web (350d1bd5740a) by user ***@icloud.com
2022-03-29T10:54:49.500818+00:00 heroku[web.1]: Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch
2022-03-29T10:54:49.587777+00:00 heroku[web.1]: Stopping process with SIGKILL
2022-03-29T10:54:49.800462+00:00 heroku[web.1]: Process exited with status 137

如果动态引用环境变量中的端口号,就会获取失败

2022-03-29T11:12:03.984493+00:00 heroku[web.1]: State changed from crashed to starting
2022-03-29T11:12:19.984320+00:00 heroku[web.1]: Starting process with command `python /code/server3.py`
2022-03-29T11:12:21.706887+00:00 heroku[web.1]: Process exited with status 1
2022-03-29T11:12:21.536737+00:00 app[web.1]: Traceback (most recent call last):
2022-03-29T11:12:21.536756+00:00 app[web.1]: File "/code/server3.py", line 248, in <module>
2022-03-29T11:12:21.536757+00:00 app[web.1]: serverSocket.bind(("0.0.0.0", serverPort))
2022-03-29T11:12:21.536757+00:00 app[web.1]: TypeError: an integer is required (got type NoneType)
2022-03-29T11:12:21.769096+00:00 heroku[web.1]: State changed from starting to crashed

本机地址无论不写
serverSocket.bind(("", serverPort))
还是写127.0.0.1
serverSocket.bind((“127.0.0.1”, serverPort))
还是写0.0.0.0
serverSocket.bind((“0.0.0.0”, serverPort))
都不行

Python项目解决方案

需要动态绑定端口号

Dockerfile中要这样写,传入$POST

#基于的基础镜像
FROM python:3.4

#代码添加到code文件夹
ADD ./pythonProject /code

# 设置code文件夹是工作目录
WORKDIR /code

# 安装支持
#RUN pip install -r requirements.txt

CMD python /code/server3.py $PORT

Python文件书写格式,在server.py中要通过参数获取

serverPort = int(sys.argv[1])

完整结构如下

if __name__ == '__main__':
    serverSocket = socket(AF_INET, SOCK_STREAM)
    serverPort = int(sys.argv[1])
    serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
    serverSocket.bind(("", serverPort))

    serverSocket.listen(5)
    print('The server is running')
    # Main web server loop. It simply accepts TCP connections, and get the request processed in seperate threads.
    while True:
        # Set up a new connection from the client
        connectionSocket, addr = serverSocket.accept()
        # Clients timeout after 60 seconds of inactivity and must reconnect.
        connectionSocket.settimeout(600)
        # start new thread to handle incoming request
        _thread.start_new_thread(process, (connectionSocket,))

NodeJs项目解决方案

// production
config.port = process.env.PORT

app.listen(config.port, () => {
  logger.info('Listening on port %d', config.port);
});

或者

.listen(process.env.PORT || 5000)

或者

production: {
    server: {
        host: '0.0.0.0',
        port: process.env.PORT
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Heroku是一个云平台,可以用来部署和托管各种类型的应用程序,包括Vue.js和Spring Boot应用程序。Vue.js是一个流行的JavaScript框架,用于构建用户界面,而Spring Boot是一个用于构建Java应用程序的框架。在Heroku上部署Vue.js和Spring Boot应用程序需要一些配置和步骤。 首先,你需要在Heroku上创建一个应用程序,并将你的Vue.js和Spring Boot代码推送到Heroku的代码仓库中。然后,你需要配置Heroku的构建过程,以确保正确地构建和部署你的应用程序。 对于Vue.js应用程序,你可以使用Heroku的Node.js构建包来构建和部署你的应用程序。你需要在你的Vue.js项目中添加一个`package.json`文件,并在其中指定构建和启动应用程序的命令。然后,你可以使用Heroku的CLI工具或HerokuWeb界面来设置构建过程,并将你的代码推送到Heroku。 对于Spring Boot应用程序,你需要在你的项目中添加一个`Procfile`文件,并在其中指定启动应用程序的命令。然后,你可以使用Heroku的CLI工具或HerokuWeb界面来设置构建过程,并将你的代码推送到Heroku。 在部署过程中,你还需要配置数据库和其他依赖项。对于数据库,你可以使用Heroku提供的各种数据库插件,如Heroku Postgres或Heroku MySQL。你可以在HerokuWeb界面上添加这些插件,并配置你的应用程序以连接到相应的数据库。 总结起来,要在Heroku上部署Vue.js和Spring Boot应用程序,你需要完成以下步骤: 1. 创建Heroku应用程序并将代码推送到Heroku的代码仓库。 2. 配置Vue.js应用程序的构建过程,并将代码推送到Heroku。 3. 配置Spring Boot应用程序的构建过程,并将代码推送到Heroku。 4. 配置数据库和其他依赖项。 希望这些信息对你有帮助![1][2][3]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值