Ce que je veux :
J'ai un programme clojure sur un site distant, appelons-le mccarthy
. Ce que je veux faire, c'est me connecter à un nrepl-ritz
à partir de mon ordinateur portable, de préférence en utilisant nrepl-ritz-jack-in
. La prise fonctionne bien pour un programme local, mais ne semble pas se connecter à un programme distant.
Tentative 1
C-x C-f sur /mccarthy:code/program/project.clj
(require 'nrepl-ritz)
M-x nrepl-ritz-jack-in
Résultat
Emacs semble se bloquer. Si j'accède à la page *nrepl-server*
tampon, je vois ceci :
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)
(et des tonnes d'autres lignes aussi...)
J'utilise drip
sur mon ordinateur portable, mais pas sur mccarthy
Il est donc clair que nrepl-ritz-jack-in
ne détecte pas qu'il s'agit d'un fichier distant. L'ancien nrepl-jack-in
fonctionnera cependant comme prévu dans ce cas.
Tentative 2
J'ai également essayé de lancer un nrepl-ritz
en utilisant lein
sur mccarthy
:
mattox@mccarthy$ lein ritz-nrepl
nREPL server started on port 42874
Depuis mon ordinateur portable, je redirige un port de manière à ce que le port local 42874
se connecte à 42874
sur mccarthy
:
ssh -L 42874:localhost:42874 -N mccarthy
Ensuite, à partir de mon Emacs local :
(require 'nrepl-ritz)
M-x nrepl
Hôte : 127.0.0.1
Port : 42874
Cela me permet d'établir un lien :
; nREPL 0.1.7-preview
user>
Pour le tester, je lance
M-x nrepl-ritz-threads
Cela me permet d'obtenir un joli tableau de fils.
M-x nrepl-ritz-break-on-exception
user> (/ 1 0)
Résultat
Il se bloque, mais affiche parfois un tampon de débogage caché avec quelques redémarrages possibles. Si je lui demande de transmettre l'exception au programme, il ne redonne jamais le contrôle au REPL.
J'ai fait de nombreuses recherches mais je n'ai pas réussi à obtenir quelque chose de plus spécifique que "assurez-vous que lein est sur votre chemin" (et je l'ai fait, sur les deux machines...).