lein repl 错误:连接被拒绝。

4

我在Ubuntu上安装了leiningen,但当我运行lein repl时,它会抛出一个"Connection refused"错误。以下是错误信息:

$ lein repl
Exception in thread "Thread-4" java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
    at java.net.Socket.connect(Socket.java:579)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:208)
    at clojure.tools.nrepl$connect.doInvoke(nrepl.clj:184)
    at clojure.lang.RestFn.invoke(RestFn.java:421)
    at clojure.tools.nrepl.ack$send_ack.invoke(ack.clj:47)
    at clojure.tools.nrepl.server$start_server.doInvoke(server.clj:146)
    at clojure.lang.RestFn.invoke(RestFn.java:619)
    at user$eval540.invoke(NO_SOURCE_FILE:0)
    at clojure.lang.Compiler.eval(Compiler.java:6619)
    at clojure.lang.Compiler.eval(Compiler.java:6609)
    at clojure.lang.Compiler.eval(Compiler.java:6582)
    at clojure.core$eval.invoke(core.clj:2852)
    at leiningen.core.eval$fn__3577.invoke(eval.clj:304)
    at clojure.lang.MultiFn.invoke(MultiFn.java:231)
    at leiningen.core.eval$eval_in_project.invoke(eval.clj:326)
    at clojure.lang.AFn.applyToHelper(AFn.java:167)
    at clojure.lang.AFn.applyTo(AFn.java:151)
    at clojure.core$apply.invoke(core.clj:619)
    at leiningen.repl$server$fn__7443.invoke(repl.clj:201)
    at clojure.lang.AFn.applyToHelper(AFn.java:159)
    at clojure.lang.AFn.applyTo(AFn.java:151)
    at clojure.core$apply.invoke(core.clj:617)
    at clojure.core$with_bindings_STAR_.doInvoke(core.clj:1788)
    at clojure.lang.RestFn.invoke(RestFn.java:425)
    at clojure.lang.AFn.applyToHelper(AFn.java:163)
    at clojure.lang.RestFn.applyTo(RestFn.java:132)
    at clojure.core$apply.invoke(core.clj:621)
    at clojure.core$bound_fn_STAR_$fn__4102.doInvoke(core.clj:1810)
    at clojure.lang.RestFn.invoke(RestFn.java:397)
    at clojure.lang.AFn.run(AFn.java:24)
    at java.lang.Thread.run(Thread.java:722)

我曾在github上看到过一个类似的问题:lein repl error,但它并没有解决我的问题。有人知道原因吗?
环境:
- 操作系统:Ubuntu 12.04 - Leiningen版本:2.3.4 - Java版本:1.7.0_21

我对Leiningen了解不多,所以我说的可能都是错误或多余的,但已经过去两天了:lein repl启动了两个进程,一个客户端和一个服务器,它们通过一个TCP端口进行通信。也许你的系统配置了默认阻止Leiningen使用的端口。lein help repl显示了如何尝试使用其他端口来查看是否有效。(然后你可能需要学习如何更改TCP配置。)你提供的GitHub讨论中还提供了其他实验的方法。 - Mars
1个回答

7

首先,你的堆栈跟踪缺少“Caused by...”原始异常。虽然我没有经历过这种情况,但我已经能够复现它并得到相同的堆栈跟踪,还有以下行:

Caused by: java.net.UnknownHostException: i7mito: System error
        at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method)
        at java.net.InetAddress$1.lookupAllHostAddr(InetAddress.java:894)
        at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1286)
        at java.net.InetAddress.getLocalHost(InetAddress.java:1462)
        ... 36 more

如果我从/etc/hosts/文件中删除了我的机器名(i7mito),并且保留如下形式:
127.0.0.1 localhost

所以我的猜测是,lein 依赖 DNS 来将你的机器名称(在我的情况下为i7mito)解析为 IP 地址。这个名称解析的第一步是你的 hosts 文件,所以我建议首先检查它。我意识到,将 IP 绑定到 localhost 并不重要,重要的是将其绑定到 hostname 命令的结果。

因此,如果确保将你的机器名称映射到 /etc/hosts 文件中的 127.0.0.1,可能会起作用。如果没有成功,请检查网络配置,因为其他用户指出似乎与某些相关事项有关。

希望能有所帮助,当然,这只适用于如果你得到了相同的堆栈跟踪附加行 :)


你是对的!非常感谢。我在/etc/hosts中注释了那一行。 - mahengyang
你可以投票支持这个答案,以标记问题已得到解答 enyo :) - Jaime Agudo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接