Como posso fazer o nrepl-ritz-jack-in funcionar remotamente através do TRAMP / Emacs

299

O que eu quero:

Eu tenho um programa de clojure em um site remoto, vamos chamá-lo mccarthy. O que eu quero fazer é conectar a um nrepl-ritzdo meu laptop, de preferência usando nrepl-ritz-jack-in. A entrada funciona bem para um programa local, mas parece não se conectar a um programa remoto.

Tentativa 1

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

(require 'nrepl-ritz)

M-x nrepl-ritz-jack-in

Resultado

O Emacs parece travar. Se eu for para o *nrepl-server*buffer, vejo o seguinte:

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)

(e toneladas de outras linhas também ...)

Estou usando dripno meu laptop, mas não no mccarthy, portanto, claramente nrepl-ritz-jack-innão está detectando que é um arquivo remoto. nrepl-jack-inNo entanto, a idade normal funcionará como esperado neste caso.

Tentativa 2

Eu também tentei iniciar um nrepl-ritzuso leinem mccarthy:

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

Do meu laptop I encaminhar uma porta para que locais 42874Ligações para 42874on mccarthy:

ssh -L 42874:localhost:42874 -N mccarthy

Então, do meu Emacs local:

(require 'nrepl-ritz)

M-x nrepl

Hospedeiro: 127.0.0.1

Porta: 42874

Isso me dá uma conexão:

; nREPL 0.1.7-preview
user> 

Então, para testá-lo, eu corro

M-x nrepl-ritz-threads

Isso me dá uma boa tabela de tópicos.

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

user> (/ 1 0)

Resultado

Isso trava, mas às vezes mostra um buffer de depuração oculto com algumas reinicializações disponíveis. Se eu disser para devolver a exceção ao programa, ele nunca devolve o controle ao REPL.

Eu fiz muitas pesquisas, mas não consegui obter nada mais específico do que "verifique se o lein está no seu caminho" (e eu fiz isso nas duas máquinas ...).

MattoxBeckman
fonte
44
(/ 1 0)- isso trava? Provavelmente tentando avaliar o infinito ... ;-)
firefrorefiddle
8
Tentando Attempt 2na sua máquina local, funciona ok? Isso está começando lein ritz-reple, em seguida, conectando de emacs
Guillermo Winkler
4
Sim, a partir da minha máquina local funcionou bem. São apenas conexões remotas que têm problemas.
MattoxBeckman
5
Se você seguir estes passos que deve funcionar: devcenter.heroku.com/articles/debugging-clojure
Avanz
6
Já respondeu mano. stackoverflow.com/questions/22908315/... Não é exatamente o que você está procurando, mas ele vai ajudar
prestotron

Respostas:

1

Se a substituição ainda estiver em execução a partir do cider-jack-in anterior, você deve usar o comando cider para se conectar à instância em execução ou interromper o anterior antes de iniciar um novo

From Here ` Clojure - problema de conexão executando novamente cider-jack-in

Veja também isso https://devcenter.heroku.com/articles/debugging-clojure

Syed Ali Naqi
fonte