【问题标题】:lein repl error:Connection refusedlein repl 错误:连接被拒绝
【发布时间】:2026-02-04 06:25:01
【问题描述】:

我在我的 Ubuntu 上安装了 leiningen,但是当我运行 lein repl 时它会抛出 “连接被拒绝” 错误。这是错误:

$ 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
  • 列宁根:列宁根 2.3.4
  • java: 1.7.0_21

【问题讨论】:

  • 我对 Leiningen 了解不多,所以我要说的可能都是错误的或多余的,但已经两天了:lein repl 启动了两个进程,一个客户端和一个服务器,它们会说话通过 tcp 端口。也许您的系统配置为默认阻止 Leiningen 使用的端口。 lein help repl 展示了如何试验替代端口以查看是否可行。 (然后您可能必须学习如何更改 tcp 配置。)您链接的 github 讨论提供了其他实验方法。

标签: clojure leiningen


【解决方案1】:

首先,您的堆栈跟踪缺少 Caused by... 原始异常。我没有经历过,但我已经能够通过相同的堆栈跟踪 j 加上这些行来重现它

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 地址。此名称解析的第一步是您的主机文件,所以我会先检查它。我意识到你绑定到 localhost 的 IP 并不重要,重要的是绑定到 hostname 命令结果的 IP。

因此,如果您确保您的机器名称映射到 /etc/hosts 文件中的 127.0.0.1 ,它可能会起作用。如果它没有检查您的网络配置,因为它似乎与其他用户有关。

希望它有所帮助,当然,如果您在堆栈跟踪中获得相同的额外行,这适用:)

【讨论】:

  • 你是对的!非常感谢。我在/etc/hosts 中评论了该行
  • 您可以对答案进行投票以将问题标记为已回答 enyo :)