如何使 nrepl-ritz-jack-in 通过 TRAMP / Emacs 远程工作
Posted
技术标签:
【中文标题】如何使 nrepl-ritz-jack-in 通过 TRAMP / Emacs 远程工作【英文标题】:How can I make nrepl-ritz-jack-in work remotely over TRAMP / Emacs 【发布时间】:2013-02-26 04:05:39 【问题描述】:我想要什么:
我在远程站点上有一个 clojure 程序,我们称之为mccarthy
。
我想做的是从我的笔记本电脑连接到nrepl-ritz
,最好使用nrepl-ritz-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
:
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 在你的路径上”更具体的内容(我确实在两台机器上都这样做了......)。
【问题讨论】:
(/ 1 0)
- 这挂了?可能试图评估无穷大...... ;-)
在您的本地机器上尝试Attempt 2
,它工作正常吗?那是从 lein ritz-repl
开始,然后从 emacs 连接
是的,从我的本地机器开始工作正常。只是远程连接有问题。
如果您按照以下步骤操作,它应该可以工作:devcenter.heroku.com/articles/debugging-clojure
已经回答了兄弟。 ***.com/questions/22908315/… 这不是您想要的,但它会有所帮助
【参考方案1】:
如果 repl 仍在从前一个 cider-jack-in 运行,您应该使用 cider 命令连接到正在运行的实例,或者在启动新实例之前停止前一个
从这里`Clojure - connection issue re-running cider-jack-in
另见https://devcenter.heroku.com/articles/debugging-clojure
【讨论】:
以上是关于如何使 nrepl-ritz-jack-in 通过 TRAMP / Emacs 远程工作的主要内容,如果未能解决你的问题,请参考以下文章