J'ai un programme de clojure sur un site distant, appelons-le mccarthy
. Ce que je veux faire, c'est me connecter à un nrepl-ritz
de mon ordinateur portable, de préférence avec nrepl-ritz-jack-in
. La prise marche bien pour un programme local, mais ne semble pas se connecter à un programme distant.
C-x C-f sur /mccarthy:code/program/project.clj
(require 'nrepl-ritz)
M-x nrepl-ritz-jack-in
Emacs semble pendre. Si je vais au *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
, donc clairement nrepl-ritz-jack-in
ne détecte pas qu'il s'agit d'un fichier distant. Vieux régulière nrepl-jack-in
fonctionnera comme prévu dans ce cas, cependant.
J'ai aussi essayé de démarrer un nrepl-ritz
en utilisant lein
sur mccarthy
:
mattox@mccarthy$ lein ritz-nrepl
nREPL server started on port 42874
De mon ordinateur portable je transfère un port si local 42874
se connecte à 42874
sur mccarthy
:
ssh -L 42874:localhost:42874 -N mccarthy
Ensuite, de mon Emacs local:
(require 'nrepl-ritz)
M-x nrepl
Hôte: 127.0.0.1
Port: 42874
Cela me donne une connexion:
; nREPL 0.1.7-preview
user>
Donc, pour le tester, je cours
M-x nrepl-ritz-threads
Cela me donne une belle table de fils.
M-x nrepl-ritz-break-on-exception
user> (/ 1 0)
Cela se bloque, mais affiche parfois un tampon de débogage caché avec certains redémarrages disponibles. Si je lui dis de renvoyer l'exception au programme, il ne restituera jamais le contrôle au REPL.
J'ai fait beaucoup de recherches mais je n'ai pas pu obtenir quelque chose de plus spécifique que "assurez-vous que lein est sur votre chemin" (et c'est ce que j'ai fait, sur les deux machines ...).
Si la réplique est toujours en cours d'exécution à partir de la précédente prise de cidre, vous devez utiliser la commande cidercommand pour vous connecter à l'instance en cours ou arrêter la précédente avant d'en démarrer une nouvelle.
À partir d'ici ` Clojure - Problème de connexion lors de la relance de cider-jack-in
Voir aussi ce https://devcenter.heroku.com/articles/debugging-clojure