5

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)
4

3 に答える 3

1

Heroku が $PORT 変数で提供するポートのみを使用できることに注意してください。

したがって:

web: bin/proximo [your existing command]

これを含める必要があります。例:

web: bin/proximo [your existing command] -p $PORT

または、Webプロセスが実行されるポートを指示するために必要なもの。

于 2012-12-20T17:42:20.280 に答える
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;
  }
}

このソリューションについては、この記事で詳しく説明しています。

于 2015-03-06T15:29:21.790 に答える
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);

実際の IP アドレスで 127.0.0.1 を使用します。

于 2012-12-17T08:53:51.133 に答える