2012-02-06 32 views
6

Tôi đang cố gắng chạy mã Scala của mình bằng SBT, nhưng gặp lỗi bên dưới. Điều này xảy ra cả với SBT sử dụng dòng lệnh và với IntelliJ Idea.Quyền bị từ chối liên kết với cổng khi chạy ứng dụng Scala qua SBT

[error] (run-main) org.jboss.netty.channel.ChannelException: 
    Failed to bind to: /127.0.0.1:80 
    org.jboss.netty.channel.ChannelException: Failed to bind to: /127.0.0.1:80 
    .... 
    .... 
    Caused by: java.net.SocketException: Permission denied 

Tôi định cấu hình để cho phép truy cập cổng. Điều này xảy ra khi tôi cố gắng chạy trên máy Mac cục bộ của tôi và trên máy chủ Ubuntu từ xa của tôi.

Chạy sbt bằng "sudo sbt" khắc phục sự cố, nhưng đây không phải là giải pháp. Tôi có thể đặt quyền cho phép ứng dụng Scala truy cập vào cổng 80 ở đâu 80.

+0

Hệ điều hành, phân phối (nếu có) và phiên bản nào? –

+0

Vấn đề tương tự trên Mac Lion và máy chủ Ubuntu 10.04. Sử dụng JDK 1.6 và SBT 0.11.2 và Scala 2.9.1 – Jack

+0

Tôi không biết về Lion, nhưng googling tiết lộ không có giải pháp nào ngoài sudo. Ubuntu sẽ sử dụng các giải pháp tương tự như Debian, mà tôi đưa vào câu trả lời của tôi dưới đây. Xem thêm [serverfault question] (http://serverfault.com/questions/112795/how-can-i-run-a-server-on-linux-on-port-80-as-a-normal-user) . Lưu ý rằng đây không phải là vấn đề lập trình, mà là sự cố Hệ điều hành. –

Trả lời

4

Các giải pháp cho vấn đề này sẽ phụ thuộc vào hệ điều hành, không phải trên bất cứ điều gì mà SBT, Scala hoặc Java có thể làm.

Ví dụ, Debian đề xuất three different solutions, tất cả đều có thể được sử dụng trên các bản phân phối Linux khác - hai trong số đó là các biến thể trên chạy bằng root, và thứ ba sử dụng iptables để giả lắng nghe trên cổng 80.

Trên FreeBSD người ta có thể vô hiệu hóa giới hạn cổng thấp hoàn toàn, và Solaris có thể làm như vậy cho mỗi cổng và người dùng, như được mô tả (cho cả hai) here.

4

Chạy sbt bằng "sudo sbt" khắc phục sự cố, nhưng đây không phải là giải pháp. Tôi có thể đặt quyền để cho phép ứng dụng Scala của tôi truy cập vào cổng 80.

Tôi nghĩ đó là giải pháp duy nhất của bạn. Chỉ các ứng dụng đặc quyền mới có thể liên kết với các cổng dưới 1024.

Có thể bạn cảm thấy thoải mái hơn khi chạy proxy http trên cổng 80 (chỉ proxy), hoặc có quy tắc ipfilter định tuyến lại cổng đến 80 đến cổng 8080 ? Xem thêm this answer.

2

Bạn có thể muốn xem qua commons-daemon [1] và mã nhị phân jsvc của nó. Điều này cho phép bạn bắt đầu với quyền root và drop sau khi một số nhiệm vụ. Các nhiệm vụ ở đây có thể là Ràng buộc của cổng.

[1] http://commons.apache.org/daemon/

Các vấn đề liên quan