Wie kann ich nrepl-ritz-jack-in remote über TRAMP / Emacs arbeiten lassen?

299

Was ich möchte:

Ich habe ein Clojure-Programm auf einer entfernten Site, nennen wir es mccarthy. Ich möchte nrepl-ritzvon meinem Laptop aus eine Verbindung zu einem herstellen , vorzugsweise über nrepl-ritz-jack-in. Der Jack-In funktioniert gut für ein lokales Programm, scheint jedoch keine Verbindung zu einem Remote-Programm herzustellen.

Versuch 1

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

(require 'nrepl-ritz)

M-x nrepl-ritz-jack-in

Ergebnis

Emacs scheint zu hängen. Wenn ich zum *nrepl-server*Puffer gehe , sehe ich Folgendes:

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)

(und jede Menge andere Zeilen auch ...)

Ich verwende dripauf meinem Laptop, aber nicht auf mccarthy, so nrepl-ritz-jack-indass ich nicht erkenne, dass es sich um eine entfernte Datei handelt. Normales Alt nrepl-jack-infunktioniert in diesem Fall jedoch wie erwartet.

Versuch 2

Ich habe auch versucht, eine nrepl-ritzVerwendung leinzu starten mccarthy:

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

Von meinem Laptop leite ich einen Port so lokalen 42874Connects zu 42874auf mccarthy:

ssh -L 42874:localhost:42874 -N mccarthy

Dann von meinen lokalen Emacs:

(require 'nrepl-ritz)

M-x nrepl

Wirt: 127.0.0.1

Hafen: 42874

Dies gibt mir eine Verbindung:

; nREPL 0.1.7-preview
user> 

Um es auszuprobieren, renne ich

M-x nrepl-ritz-threads

Es gibt mir eine schöne Tabelle mit Themen.

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

user> (/ 1 0)

Ergebnis

Dies hängt, zeigt aber manchmal einen versteckten Debugging-Puffer mit einigen verfügbaren Neustarts. Wenn ich ihm sage, dass er die Ausnahme an das Programm zurückgeben soll, gibt er der REPL niemals die Kontrolle zurück.

Ich habe viele Suchanfragen durchgeführt, konnte aber nichts Spezifischeres als "Stellen Sie sicher, dass Lein auf Ihrem Weg ist" finden (und das habe ich auf beiden Computern getan ...).

MattoxBeckman
quelle
44
(/ 1 0)- das hängt? Wahrscheinlich versuchen, Unendlichkeit zu bewerten ... ;-)
Firefrorefiddle
8
Versuchen Sie das Attempt 2in Ihrem lokalen Computer, funktioniert es in Ordnung? Das beginnt lein ritz-replund verbindet sich dann von Emacs
Guillermo Winkler
4
Ja, ausgehend von meinem lokalen Computer hat es gut funktioniert. Es sind nur Remoteverbindungen, die Probleme haben.
MattoxBeckman
5
Wenn Sie diese Schritte ausführen,
Avanz
6
Schon beantwortet Bruder. stackoverflow.com/questions/22908315/… Es ist nicht genau das, wonach Sie suchen, aber es wird helfen
Prestotron

Antworten:

1

Wenn die Replikation noch vom vorherigen Cider-Jack-In ausgeführt wird, sollten Sie entweder den Cider-Befehl verwenden, um eine Verbindung zur laufenden Instanz herzustellen, oder den vorherigen stoppen, bevor Sie eine neue starten

Von hier ` Clojure - Verbindungsproblem beim erneuten Ausführen von Cider-Jack-In

Siehe auch dies https://devcenter.heroku.com/articles/debugging-clojure

Syed Ali Naqi
quelle