298 votes

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

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

1voto

SyedAliNaqi Points 244

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

D'ici ` Clojure - problème de connexion lors de l'exécution de cider-jack-in

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X