连接Emacs Cider到Vagrant主机上的Clojure项目

4
我正在尝试同时使用 vagrantClojureemacs。具体地,我无法将 cider 连接到我的 vagrant 虚拟机上。
在本地运行我的项目时是可以的,当我在项目中运行 cider-jack-in 时。但我不知道如何在通过 vagrant 共享的同一项目中执行此操作。
目前,我尝试了以下步骤:
  • ssh vagrant,然后 cd my-project-dir,最后 lein repl
  • 在 emacs 中,使用 cider-connect,输入 vagrant@192.168.50.50,端口 22
我收到以下消息:

SSH 端口转发失败,请检查 nrepl-tunnel 缓冲区。

在该缓冲区中:

OpenSSH_6.2p2,OSSLShim 0.9.8r 2011年12月8日 特权端口只能由root转发。

进程nrepl-tunnel以代码255异常退出

我该如何以root身份运行它?这真的是问题吗?我应该使用另一个端口吗?我是否需要在我的Clojure代码中放置特定的内容以启用它?这里给出的指示对我来说有点不清楚。

注意:它与这个问题不同,因为emacs在主机上运行,而不是在vagrant机器上。

编辑

以下是我所做的详细步骤,感谢@Shlomi的回答:

  • 通过添加以下内容编辑 .ssh/config 文件(根据你的 Vagrantfile 编辑 IP):

    Host vagrant HostName 192.168.50.50 Port 22 User vagrant ForwardAgent yes

  • 在主机上,使用 lein repl 启动我的项目。注意消息中的端口:nREPL server started on port 42018 on host 127.0.0.1 - nrepl://127.0.0.1:42018

  • 在 Emacs 中,输入 M-x cider-connect,输入 vagrant、密码和上一个 lein 命令中记录的端口。

  • 就这样 :)

1个回答

2

看起来你正在使用的端口是SSH端口而不是nrepl端口。

我通常使用tramp通过emacs进行远程访问:

  1. 在.ssh/config中为你的远程主机添加一个条目,例如 vagrant
  2. 在emacs中,输入 cider-connect,然后输入 vagrant
  3. 在较新版本的cider中,它会自动查找该主机上所有活动的nrepl会话,并显示它们的项目名称和端口,因此选择正确的会话,你就可以开始工作了。

  1. 直接无法工作,或者我没有在vagrant机器上正确启动nrepl?我被要求输入A-我的密码B-连接的端口(我尝试了59258)C-再次输入我的密码(“在缓冲区nrepl-tunnelvagrant@192.168.50.50的密码”)D-连接被关闭(“nREPL,连接意外关闭...”)。
- nha
哦,我必须注意nRepl中的消息:“nREPL服务器已在主机127.0.0.1上的端口42018上启动 - nrepl:// 127.0.0.1:42018”。现在它可以工作了,谢谢(+1)。 - nha
1
你还应该检查 ssh-copy-id,它可以让你跳过已知主机的密码输入,可能在你的情况下非常有用。 - Shlomi
@Schlomi 你是否有重新加载REPL的工作流程?我可以杀掉vagrant REPL,然后使用cider-connect重新连接,但感觉不够优化。 - nha
1
抱歉,但我不这样做。我和你描述的一样:杀掉并重新启动repl,然后使用cider-connect重新连接。 - Shlomi

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