错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT - Heroku

Posted

技术标签:

【中文标题】错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT - Heroku【英文标题】:Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch - Heroku 【发布时间】:2016-03-08 02:51:26 【问题描述】:

我正在尝试在 heroku 上部署我的服务器。我收到了这个错误:

Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch

这是我的 Java 类:

package introsde.document.endpoint;
import javax.xml.ws.Endpoint;

import introsde.assignment.soap.PeopleImpl;

public class PeoplePublisher 
public static String SERVER_URL = "http://localhost";
public static String PORT = "6902";
public static String BASE_URL = "/ws/people";

public static String getEndpointURL() 
    return SERVER_URL+":"+PORT+BASE_URL;


public static void main(String[] args) 
    String endpointUrl = getEndpointURL();
    System.out.println("Starting People Service...");
    System.out.println("--> Published at = "+endpointUrl);
    Endpoint.publish(endpointUrl, new PeopleImpl());


我该如何解决这个问题?

谢谢

【问题讨论】:

【参考方案1】:

为自己尝试了一切。 @fortellao 的回答对我来说是救命稻草。如果有人像我一样使用 src/main/resources/application.yml,只需添加一点:

app:
  server:
    port: $PORT

port: 5000 在我的情况下成功了。

【讨论】:

【参考方案2】:

您可能在没有等待服务器完成运行的情况下发出请求,因此它中断,因为无法在 90 秒之前完成构建。

这是一个猜测。

【讨论】:

【参考方案3】:

由于您的这不是 Spring Boot 应用程序,您应该执行以下操作:

package introsde.document.endpoint;
import javax.xml.ws.Endpoint;

import introsde.assignment.soap.PeopleImpl;

public class PeoplePublisher 
public static String SERVER_URL = "http://localhost";
public String port;
public static String BASE_URL = "/ws/people";

public static String getEndpointURL() 
    return SERVER_URL+":"+port+BASE_URL;


public static void main(String[] args) 

    port = Integer.valueOf(args[0]);

    String endpointUrl = getEndpointURL();
    System.out.println("Starting People Service...");
    System.out.println("--> Published at = "+endpointUrl);
    Endpoint.publish(endpointUrl, new PeopleImpl());


然后在你的 Procfile 上:

web: java $JAVA_OPTS -jar target/*.jar $PORT

这样您就可以将您的套接字绑定到 Heroku 期望您监听的端口。

【讨论】:

【参考方案4】:

当 Heroku 找不到 Procfile 中指定的端口时会出现此问题。

解决这个问题的一个简单方法是通过 Procfile 动态设置端口。

添加Procfile ->

web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/nome_do_meu_app.jar

记住,Maven 打包应该是 JAR。

【讨论】:

【参考方案5】:

简单的解决方案:

web: java -Dserver.port=$PORT $JAVA_OPTS -jar target/myapi-1.0.0.jar

myapi-1.0.0 替换为您的jar 名称或使用*

注意: 变量的顺序很重要。例如:以下不起作用。

web: java $JAVA_OPTS -Dserver.port=$PORT -jar target/myapi-1.0.0.jar

【讨论】:

实际上后者对我有用。有什么可能的解释吗? java $JAVA_OPTS -Dserver.port=$PORT -jar 目标/*.jar @nayak 多年来可能有所改变。我的回答在 2018 年有效。【参考方案6】:

我在端口绑定方面遇到了同样的问题。然后我找到了this 很棒的文章,在那里我了解了在 Heroku 上部署时一切实际上是如何工作的。读完之后,我设法在 2 分钟内解决了我的问题。链接已失效,但找到存档链接here。

【讨论】:

这确实是一篇很棒的文章。它也解决了我的问题,即对于 Tomcat,您需要将 -Dserver.port=$PORT 添加到您的 Procfile 以使 Tomcat 绑定到 Heroku 指定的端口。 很遗憾链接失效了。【参考方案7】:

另外,我想添加以下内容到 Procfile,允许我将我的 Spring Boot 应用程序部署到 Heroku 并解决您上面描述的异常:

worker: java $JAVA_OPTS -jar target/myTargetJar-SNAPSHOT.jar

网络上列出的所有解决方案都没有帮助我解决问题,这就是为什么我决定在这里发布对我有帮助的解决方案。不过,也许它不准时:)

【讨论】:

我已将“web: java -Dserver.port=$PORT -jar target/dependency/webapp-runner.jar target/*.war”更改为“worker: java -Dserver.port=$ PORT -jar target/dependency/webapp-runner.jar target/*.war”在我的电脑“heroku local web”上运行命令并得到消息“[WARN] required key 'web' doesn't Exist in Procfile Definition”跨度> 您还应该在项目的根目录中添加一个 Procfile,其内容如下: web: java $JAVA_OPTS -jar target/myTargetJar-SNAPSHOT.jar -Dserver.port=$PORT【参考方案8】:

我在尝试创建最小的 spring-boot 应用程序时遇到了同样的问题。我已经将 heroku 的 java-getting-started 实现与我的进行了比较,发现了这个很好的修复。 只需将其添加到 src/main/resources/application.properties

server.port=$PORT:5000

【讨论】:

经过几个小时的尖叫和喊叫后,我找到了这篇文章,它挽救了我的理智。谢谢! 确保不要将端口用作 5000,最好使用您的应用程序默认使用的端口,例如8080 我尝试了很多解决方案,最终这个解决方案对我有用。【参考方案9】:

您必须绑定到 Heroku 指定为环境变量 $PORT 和主机 0.0.0.0 的端口。因此,您应该更改代码以包含以下内容:

public static String PORT = System.getenv("PORT");

SERVER_URL 部分可能更棘手。您可以使用 0.0.0.0,但如果您确实需要可公开访问的 URL,则需要设置如下内容(将“yourappname”更改为您的应用名称):

$ heroku config:set SERVER_URL="https://yourappname.herokuapp.com"

然后添加代码:

public static String SERVER_URL = System.getenv("SERVER_URL");

【讨论】:

您对“0.0.0.0”主机的建议非常好。它帮助我终于启动了我的服务器模块:) 谢谢

以上是关于错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT - Heroku的主要内容,如果未能解决你的问题,请参考以下文章

错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT - HEROKU ERROR

Java Maven 项目 - 错误 R10(启动超时)-> Web 进程未能在启动后 90 秒内绑定到 $PORT

Heroku discord bot 托管错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT

Heroku Node.js 错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT

错误 R10(启动超时)-> Web 进程未能在启动后 90 秒内绑定到 $PORT(Heroku 上的 Java Discord 机器人)

错误 R10 - Web 进程在启动后 60 秒内未能绑定到 $PORT