如何使nrepl-ritz-jack-in在TRAMP / Emacs远程工作?

298

我想要什么:

我有一个Clojure程序在远程站点上,我们称其为mccarthy。我想做的是从我的笔记本电脑连接到一个nrepl-ritz,最好使用nrepl-ritz-jack-in。Jack In对于本地程序很有效,但似乎无法连接到远程程序。

尝试1

C-x C-f/mccarthy:code/program/project.clj

(require 'nrepl-ritz)

M-x nrepl-ritz-jack-in

结果

Emacs似乎挂起了。 如果我去*nrepl-server*缓冲区,我会看到这个:

Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.flatland.drip.Main.invoke(Main.java:117)
    at org.flatland.drip.Main.start(Main.java:88)
    at org.flatland.drip.Main.main(Main.java:64)
Caused by: java.lang.AssertionError: Assert failed: project
    at leiningen.ritz_nrepl$start_jpda_server.invoke(ritz_nrepl.clj:23)
    at leiningen.ritz_nrepl$ritz_nrepl.doInvoke(ritz_nrepl.clj:95)

(以及许多其他的行,也是如此...)

我在我的笔记本电脑上使用 drip,但在 mccarthy 上没有使用,因此显然 nrepl-ritz-jack-in 没有检测到它是一个远程文件。 在这种情况下,普通的旧式 nrepl-jack-in 将按预期工作。

尝试2

我还尝试在 mccarthy 上使用 lein 启动 nrepl-ritz

mattox@mccarthy$ lein ritz-nrepl
nREPL server started on port 42874

我从我的笔记本电脑上转发一个端口,以便本地端口42874连接到mccarthy上的端口42874

从我的笔记本电脑上转发一个端口,以便本地端口42874连接到mccarthy上的端口42874

ssh -L 42874:localhost:42874 -N mccarthy

然后,从我的本地Emacs:

(require 'nrepl-ritz)

M-x nrepl

主机:127.0.0.1

端口:42874

这使我获得了一个连接:

; nREPL 0.1.7-preview
user> 

为了测试它,我运行

M-x nrepl-ritz-threads

它会给我一个漂亮的线程表。

M-x nrepl-ritz-break-on-exception

user> (/ 1 0)

结果

这个程序出现了故障,但有时会显示一个隐藏的调试缓冲区,并提供一些可用的重新启动选项。如果我告诉它将异常传递回程序,它就永远不会将控制权返回REPL。

我已经进行了大量搜索,但是除了“确保lein在您的路径上”(我在两台机器上都这样做了...)之外,我无法获得任何更具体的信息。


44
(/ 1 0) - 这个挂了?可能在尝试计算无穷大... ;-)` - firefrorefiddle
8
尝试在您本地计算机上运行“Attempt 2”,它能正常工作吗?这意味着启动“lein ritz-repl”,然后从emacs连接。 - guilespi
4
没问题,从我的本地计算机开始运行可以正常工作,只是远程连接有问题。 - MattoxBeckman
5
如果您按照这些步骤操作,应该可以解决问题:https://devcenter.heroku.com/articles/debugging-clojure - Avanz
6
已经回答了兄弟。http://stackoverflow.com/questions/22908315/clojure-connection-issue-re-running-cider-jack-in 它不完全是你要寻找的内容,但它会有所帮助。 - prestotron
显示剩余6条评论
1个回答

1
如果上一个cider-jack-in仍在运行,你应该使用cider命令连接到正在运行的实例,或者在启动新实例之前停止上一个实例。
从这里开始 `Clojure - connection issue re-running cider-jack-in`
另请参阅此 https://devcenter.heroku.com/articles/debugging-clojure

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