2012-12-17 10 views
5

Heroku'ya Proximo eklentisini yükledim ve komutu varolan komutuma hazırlarken, Java'dan bir BindException alıyorum. Bu benim prepended komutumun nasıl göründüğü: web: bin/proximo sh target/bin/webapp ve Proximo parçasını (bin/proximo) çıkardığım anda uygulama hata olmadan başlatılır.Heroku'da Proximo ile java.net.BindException nasıl düzeltilir?

Bu tam stacktrace'dir. Neyi kaçırıyorum?

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) 

cevap

0

Windows On port 9999 kullanarak başka süreciyle ilgili bir şeydir, komutu çalıştırın:

netstat -a -n | find "LIST" 

Ve oradaki portun kullanılmasını engellemektedir şey listelenmelidir. Tabii ki o zaman gitmeli ve Görev Yöneticisinde bu programları el ile öldürmelisiniz. Gerçek IP adresi ile

InetAddress locIP = InetAddress.getByName("192.168.1.20"); 
serverSocket = new ServerSocket(9999, 0, locIP); 

Kullanım 127.0.0.1:

serverSocket = new ServerSocket(9999); 

olarak: Bu da işe yaramazsa, çizgi değiştirin.

+0

Bu iletide Visher ile aynı özel durumu almama rağmen, http://stackoverflow.com/questions/8965155/cannot-assign-requested-address-jvm-bind aynı sorun değildir. Heroku'da bir Java uygulaması çalıştırıyorum ve tüm giden TCP trafiğini desteklemek için eklenti Proximo'yu kullanıyorum. Başlatma sırasında, günlükler aşağıdakileri gösterir (Proximo host XX.XX.XX.XXX:1080 üzerinden 0.0.0.0/0 için bağlanan proxy trafiği). Bu nedenle, Proximo eklentisi doğru şekilde kurulmuş ve yapılandırılmış gibi görünüyor. Ancak, uygulama BindException nedeniyle durma noktasına gelir. Kendi ServerSocket'imi başlatmıyorum - Proximo eklentisi tarafından ele alınmıştır. –

+0

Sadece bir netstat yaptım | grep "1080" (1080, Proximo'nun bağlamaya çalıştığı bağlantı noktasıdır) ancak hiçbir şey görünmez (yani bağlantı noktası kullanılmaz). Yalnızca IP'ye ping atmaya çalışırken, "İstek zaman aşımına uğradı" alıyorum ve 1080 numaralı bağlantı noktasında IP'ye ping atmaya çalışırken "ana makine bulamadım". IP (ve bağlantı noktası) Proximo'nun bağlanmaya çalıştığından şüpheleniyorum, bir şekilde sunucu tarafından tanınması gerekiyor (Heroku Amazon sunucularını çalıştırıyor). bunu arşivlemenin bir yolu var mı? Herhangi bir yardım büyük beğeni topluyor. –

1

Unutmayın, yalnızca Heroku'nun PORT var olanağında sağladığı bağlantı noktasını kullanabilirsiniz. Bu nedenle

:

web: bin/proximo [your existing command] 

bu içermesi gerekir, örneğin:

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

veya web süreci üzerinde çalışan port dikte için ne gerekiyorsa.

0

Proximo sarıcı, Java ile çalışmaz. Sarmalayıcıyı kullanmak yerine uygulamanızın başlatılmasına bazı özel kodlar eklemeniz gerekir.

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

ve

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; 
    } 
} 

çözeltisi this article tam olarak tarif edilmektedir.

İlgili konular