【问题标题】:Error R10 (Boot timeout) -> Web process failed to bind to $PORT within 60 seconds of launch - Heroku错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT - 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());
}
}

我该如何解决这个问题?

谢谢

【问题讨论】:

    标签: java heroku soap


    【解决方案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”主机的建议非常好。它帮助我终于启动了我的服务器模块:) 谢谢
            猜你喜欢
            • 1970-01-01
            • 2015-09-14
            • 2021-07-26
            • 2017-06-22
            • 1970-01-01
            • 2021-04-05
            • 2021-08-19
            • 2021-09-03
            • 2021-05-17
            相关资源
            最近更新 更多