我已经在Heroku上安装了Proximo插件,当我将命令添加到现有命令时,我从Java获得了BindException。这是我的前置命令的外观:web: bin/proximo sh target/bin/webapp
,一旦删除Proximo部分(bin/proximo
),应用程序就会启动而没有错误。
这是完整的堆栈跟踪。我错过了什么?
Exception in thread "main" java.net.BindException: Cannot assign requested address
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:344)
at sun.nio.ch.Net.bind(Net.java:336)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:199)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.eclipse.jetty.server.nio.SelectChannelConnector.open(SelectChannelConnector.java:162)
at org.eclipse.jetty.server.AbstractConnector.doStart(AbstractConnector.java:297)
at org.eclipse.jetty.server.nio.SelectChannelConnector.doStart(SelectChannelConnector.java:240)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
at org.eclipse.jetty.server.Server.doStart(Server.java:270)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:58)
答案 0 :(得分:1)
请记住,您只能使用Heroku在$ PORT var。
中提供的端口因此:
web: bin/proximo [your existing command]
需要包括这个,例如:
web: bin/proximo [your existing command] -p $PORT
或任何您需要指定您的Web进程运行的端口。
答案 1 :(得分:0)
它与使用端口9999的另一个进程相关。在Windows上,运行命令:
netstat -a -n | find "LIST"
它应该列出那些占据港口的东西。当然,您必须在任务管理器中手动终止这些程序。如果仍然无效,请替换以下行:
serverSocket = new ServerSocket(9999);
使用:
InetAddress locIP = InetAddress.getByName("192.168.1.20");
serverSocket = new ServerSocket(9999, 0, locIP);
将127.0.0.1与您的实际IP地址一起使用。
答案 2 :(得分:0)
proximo包装器不适用于Java。您不必使用包装器,而是必须在应用程序的初始化中添加一些自定义代码。
URL proximo = new URL(System.getenv("PROXIMO_URL"));
String userInfo = proximo.getUserInfo();
String user = userInfo.substring(0, userInfo.indexOf(':'));
String password = userInfo.substring(userInfo.indexOf(':') + 1);
System.setProperty("socksProxyHost", proximo.getHost());
Authenticator.setDefault(new ProxyAuthenticator(user, password));
和
private class ProxyAuthenticator extends Authenticator {
private final PasswordAuthentication passwordAuthentication;
private ProxyAuthenticator(String user, String password) {
passwordAuthentication = new PasswordAuthentication(user, password.toCharArray());
}
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return passwordAuthentication;
}
}
该解决方案在this article中有详细描述。