Comment puis-je faire fonctionner à distance nrepl-ritz-jack-in sur TRAMP / Emacs

299

Ce que je veux:

J'ai un programme de fermeture sur un site distant, appelons-le mccarthy . Ce que je veux faire, c'est me connecter à un nrepl-ritzordinateur portable, de préférence en utilisant nrepl-ritz-jack-in. La prise jack 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 je vais dans le *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 dripsur mon ordinateur portable, mais pas sur mccarthy, donc nrepl-ritz-jack-inne détecte clairement pas qu'il s'agit d'un fichier distant. Regular oldnrepl-jack-in standard fonctionnera comme prévu dans ce cas, cependant.

Tentative 2

J'ai également essayé de démarrer une nrepl-ritzutilisation leinsur mccarthy:

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

De mon ordinateur portable , je transmets un port si locaux se 42874connecte à 42874le mccarthy:

ssh -L 42874:localhost:42874 -N mccarthy

Ensuite, de mes Emacs locaux:

(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)

Résultat

Cela se bloque, mais affiche parfois un tampon de débogage caché avec des redémarrages disponibles. Si je lui dis de renvoyer l'exception au programme, il ne redonne jamais le contrôle au REPL.

J'ai fait beaucoup de recherches mais je n'ai pas pu obtenir quelque chose de plus précis que "assurez-vous que lein est sur votre chemin" (et je l'ai fait, sur les deux machines ...).

MattoxBeckman
la source
44
(/ 1 0)- ça se bloque? J'essaie probablement d'évaluer l'infini ... ;-)
firefrorefiddle
8
Essayer le Attempt 2dans votre machine locale, ça marche bien? Cela commence lein ritz-replet se connecte ensuite depuis emacs
Guillermo Winkler
4
Oui, à partir de ma machine locale a bien fonctionné. Ce sont juste des connexions distantes qui ont du mal.
MattoxBeckman
5
Si vous suivez ces étapes, cela devrait fonctionner: devcenter.heroku.com/articles/debugging-clojure
Avanz
6
Déjà répondu frère. stackoverflow.com/questions/22908315/… Ce n'est pas exactement ce que vous cherchez mais cela vous aidera
prestotron

Réponses:

1

Si le repl est toujours en cours d'exécution à partir du précédent jack-in, vous devez soit utiliser la commande cidercommand pour vous connecter à l'instance en cours d'exécution, soit arrêter la précédente avant d'en démarrer une nouvelle

From Here ` Clojure - problème de connexion relancant le cidre-jack-in

Voir aussi ceci https://devcenter.heroku.com/articles/debugging-clojure

Syed Ali Naqi
la source