Czego chcę:
Mam program clojure na zdalnej stronie, nazwijmy to mccarthy
. Chcę połączyć się nrepl-ritz
z 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 drip
na swoim laptopie, ale nie jest włączony mccarthy
, więc wyraźnie nrepl-ritz-jack-in
nie wykrywam, że jest to plik zdalny. nrepl-jack-in
Jednak normalne stare będą działać zgodnie z oczekiwaniami w tym przypadku.
Próba 2
Próbowałem także rozpocząć nrepl-ritz
korzystanie lein
z mccarthy
:
mattox@mccarthy$ lein ritz-nrepl
nREPL server started on port 42874
Z laptopa przesyłam port, więc lokalny 42874
łączy się 42874
z 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 ...).
Attempt 2
komputerze lokalnym działa dobrze? To zaczyna się, lein ritz-repl
a następnie łączy z emacsa
(/ 1 0)
- to się zawiesza? Prawdopodobnie próbuje ocenić nieskończoność ... ;-)