Jak sprawić, by nrepl-ritz-jack-in działał zdalnie przez TRAMP / Emacs

299

Czego chcę:

Mam program clojure na zdalnej stronie, nazwijmy to mccarthy. Chcę połączyć się nrepl-ritzz laptopa, najlepiej za pomocą nrepl-ritz-jack-in. Gniazdo wejściowe działa dobrze dla programu lokalnego, ale wydaje się, że nie łączy się ze zdalnym programem.

Próba 1

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

(require 'nrepl-ritz)

M-x nrepl-ritz-jack-in

Wynik

Emacs wydaje się zawiesić. Jeśli przejdę do *nrepl-server*bufora, zobaczę to:

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)

(i mnóstwo innych linii też ...)

Używam dripna swoim laptopie, ale nie jest włączony mccarthy, więc wyraźnie nrepl-ritz-jack-innie wykrywam, że jest to plik zdalny. nrepl-jack-inJednak normalne stare będą działać zgodnie z oczekiwaniami w tym przypadku.

Próba 2

Próbowałem także rozpocząć nrepl-ritzkorzystanie leinz mccarthy:

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

Z laptopa przesyłam port, więc lokalny 42874łączy się 42874z mccarthy:

ssh -L 42874:localhost:42874 -N mccarthy

Następnie z moich lokalnych Emacsa:

(require 'nrepl-ritz)

M-x nrepl

Gospodarz: 127.0.0.1

Port: 42874

To daje mi połączenie:

; nREPL 0.1.7-preview
user> 

Aby to przetestować, biegnę

M-x nrepl-ritz-threads

Daje mi to niezłą tabelę wątków.

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

user> (/ 1 0)

Wynik

Zawiesza się, ale czasami pokazuje ukryty bufor debugowania z dostępnymi ponownymi uruchomieniami. Jeśli powiem, aby przekazał wyjątek z powrotem do programu, nigdy nie daje to kontroli REPL.

Przeprowadziłem wiele wyszukiwań, ale nie byłem w stanie uzyskać niczego bardziej szczegółowego niż „upewnić się, że lein jest na twojej drodze” (I zrobiłem to, na obu komputerach ...).

MattoxBeckman
źródło
44
(/ 1 0)- to się zawiesza? Prawdopodobnie próbuje ocenić nieskończoność ... ;-)
firefrorefiddle
8
Wypróbowanie na Attempt 2komputerze lokalnym działa dobrze? To zaczyna się, lein ritz-repla następnie łączy z emacsa
Guillermo Winkler
4
Tak, zaczynając od mojej lokalnej maszyny działało dobrze. Problemy mają tylko zdalne połączenia.
MattoxBeckman
5
Jeśli wykonasz następujące kroki, powinno to działać: devcenter.heroku.com/articles/debugging-clojure
Avanz
6
Już odpowiedziałem bracie. stackoverflow.com/questions/22908315/... To nie jest dokładnie to, czego szukasz, ale to pomoże
prestotron

Odpowiedzi: