Как я могу заставить nrepl-ritz-jack-in работать удаленно через TRAMP / Emacs

299

Что я хочу:

У меня есть программа clojure на удаленном сайте, давайте назовем ее mccarthy. То, что я хочу сделать, это подключиться к nrepl-ritzноутбуку, желательно с помощью nrepl-ritz-jack-in. Разъем работает нормально для локальной программы, но, похоже, не подключается к удаленной программе.

Попытка 1

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

(require 'nrepl-ritz)

M-x nrepl-ritz-jack-in

результат

Emacs, кажется, зависает. Если я иду в *nrepl-server*буфер, я вижу это:

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)

(и тонны других линий тоже ...)

Я использую dripна своем ноутбуке, но не на mccarthy, так что явно nrepl-ritz-jack-inне обнаруживает, что это удаленный файл. Обычный старый nrepl-jack-inбудет работать как положено в этом случае, однако.

Попытка 2

Я также попытался начать nrepl-ritzиспользование leinна mccarthy:

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

С моего ноутбука я вперед порт так местные 42874Подключается к 42874на mccarthy:

ssh -L 42874:localhost:42874 -N mccarthy

Затем из моего местного Emacs:

(require 'nrepl-ritz)

M-x nrepl

Ведущий: 127.0.0.1

Порт: 42874

Это дает мне связь:

; nREPL 0.1.7-preview
user> 

Чтобы проверить это, я бегу

M-x nrepl-ritz-threads

Это дает мне хорошую таблицу потоков.

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

user> (/ 1 0)

результат

Это зависает, но иногда показывает скрытый буфер отладки с некоторыми доступными перезагрузками. Если я скажу ему передать исключение в программу, оно никогда не вернет управление в REPL.

Я провел множество поисков, но не смог найти ничего более конкретного, чем «убедиться, что на вашем пути есть lein» (и я делал это на обеих машинах ...).

MattoxBeckman
источник
44
(/ 1 0)- это висит? Вероятно, пытаясь оценить бесконечность ... ;-)
firefrorefiddle
8
Попытка Attempt 2в вашей локальной машине, это работает хорошо? Это запускается lein ritz-replи затем соединяется с emacs
Гильермо Винклер
4
Да, начиная с моей локальной машины, работал нормально. Это просто удаленные соединения, которые имеют проблемы.
MattoxBeckman
5
Если вы выполните следующие шаги, это должно сработать: devcenter.heroku.com/articles/debugging-clojure
Avanz
6
Уже ответил братан. stackoverflow.com/questions/22908315/… Это не совсем то, что вы ищете, но это поможет
prestotron

Ответы:

1

Если реплика все еще выполняется с предыдущего гнезда сидра, вы должны либо использовать команду cider для подключения к работающему экземпляру, либо остановить предыдущий перед запуском нового

Отсюда ` Clojure - проблема с подключением повторного запуска cider-jack-in

Также посмотрите это https://devcenter.heroku.com/articles/debugging-clojure

Сайед Али Наки
источник