¿Cómo puedo hacer que nrepl-ritz-jack-in funcione de forma remota a través de TRAMP / Emacs

299

Lo que quiero:

Tengo un programa clojure en un sitio remoto, llamémoslo mccarthy. Lo que quiero hacer es conectarme a una nrepl-ritzdesde mi computadora portátil, preferiblemente usando nrepl-ritz-jack-in. El conector funciona bien para un programa local, pero no parece conectarse a un programa remoto.

Intento 1

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

(require 'nrepl-ritz)

M-x nrepl-ritz-jack-in

Resultado

Parece que Emacs se cuelga. Si voy al *nrepl-server*búfer, veo esto:

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)

(y toneladas de otras líneas, también ...)

Estoy usando dripen mi computadora portátil, pero no en mccarthy, así que claramente nrepl-ritz-jack-inno está detectando que es un archivo remoto. nrepl-jack-inSin embargo, el viejo normal funcionará como se espera en este caso.

Intento 2

También intenté comenzar a nrepl-ritzusar leinen mccarthy:

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

Desde mi portátil puedo reenviar un puerto tan local 42874se conecta a 42874en mccarthy:

ssh -L 42874:localhost:42874 -N mccarthy

Entonces, de mi Emacs local:

(require 'nrepl-ritz)

M-x nrepl

Anfitrión: 127.0.0.1

Puerto: 42874

Esto me da una conexión:

; nREPL 0.1.7-preview
user> 

Entonces, para probarlo, corro

M-x nrepl-ritz-threads

Me da una buena mesa de hilos.

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

user> (/ 1 0)

Resultado

Esto se cuelga, pero a veces muestra un búfer de depuración oculto con algunos reinicios disponibles. Si le digo que pase la excepción al programa, nunca le devolverá el control al REPL.

He realizado muchas búsquedas, pero no he podido obtener nada más específico que "asegurarme de que Lein esté en tu camino" (y lo hice, en ambas máquinas ...).

MattoxBeckman
fuente
44
(/ 1 0)- esto se cuelga? Probablemente tratando de evaluar el infinito ... ;-)
firefrorefiddle
8
Probar Attempt 2en su máquina local, ¿funciona bien? Eso comienza lein ritz-reply luego se conecta desde emacs
Guillermo Winkler
44
Sí, a partir de mi máquina local funcionó bien. Solo las conexiones remotas tienen problemas.
MattoxBeckman
55
Si sigue estos pasos, debería funcionar: devcenter.heroku.com/articles/debugging-clojure
Avanz
66
Ya respondió hermano. stackoverflow.com/questions/22908315/… No es exactamente lo que estás buscando, pero te ayudará
prestotron

Respuestas:

1

Si la respuesta aún se está ejecutando desde la entrada de sidra anterior, debe usar el comando cider para conectarse a la instancia en ejecución o detener la anterior antes de comenzar una nueva

Desde aquí ` Clojure - problema de conexión volviendo a ejecutar cider-jack-in

También vea esto https://devcenter.heroku.com/articles/debugging-clojure

Syed Ali Naqi
fuente