Bagaimana saya bisa membuat nrepl-ritz-jack-in bekerja dari jarak jauh melalui TRAMP / Emacs

299

Apa yang saya inginkan:

Saya punya program clojure di situs jarak jauh, sebut saja mccarthy. Yang ingin saya lakukan adalah menghubungkan ke nrepl-ritzdari laptop saya, lebih disukai menggunakan nrepl-ritz-jack-in. Jack in berfungsi dengan baik untuk program lokal, tetapi sepertinya tidak terhubung ke program jarak jauh.

Percobaan 1

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

(require 'nrepl-ritz)

M-x nrepl-ritz-jack-in

Hasil

Emacs tampaknya hang. Jika saya pergi ke *nrepl-server*buffer, saya melihat ini:

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)

(dan berton-ton saluran lain, juga ...)

Saya menggunakan dripdi laptop saya, tetapi tidak aktif mccarthy, jadi jelas nrepl-ritz-jack-intidak mendeteksi bahwa itu adalah file jarak jauh. Namun, lama reguler nrepl-jack-inakan berfungsi seperti yang diharapkan dalam kasus ini.

Percobaan 2

Saya juga mencoba memulai nrepl-ritzpenggunaan leindi mccarthy:

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

Dari laptop saya meneruskan port sehingga lokal 42874menghubungkan ke 42874atas mccarthy:

ssh -L 42874:localhost:42874 -N mccarthy

Kemudian, dari Emacs lokal saya:

(require 'nrepl-ritz)

M-x nrepl

Tuan rumah: 127.0.0.1

Pelabuhan: 42874

Ini memberi saya koneksi:

; nREPL 0.1.7-preview
user> 

Jadi untuk mengujinya, saya lari

M-x nrepl-ritz-threads

Ini memberi saya tabel utas yang bagus.

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

user> (/ 1 0)

Hasil

Ini hang, tapi terkadang menunjukkan buffer debugging tersembunyi dengan beberapa restart tersedia. Jika saya memintanya untuk mengembalikan pengecualian ke program, itu tidak pernah memberikan kontrol kembali ke REPL.

Saya telah melakukan banyak pencarian tetapi belum bisa mendapatkan sesuatu yang lebih spesifik daripada "pastikan lein ada di jalur Anda" (Dan saya melakukan itu, pada kedua mesin ...).

MattoxBeckman
sumber
44
(/ 1 0)- ini hang? Mungkin mencoba untuk mengevaluasi infinity ... ;-)
firefrorefiddle
8
Mencoba Attempt 2di mesin lokal Anda, tidak berfungsi ok? Itu mulai lein ritz-repldan kemudian terhubung dari emacs
Guillermo Winkler
4
Ya, mulai dari mesin lokal saya bekerja dengan baik. Hanya saja koneksi jarak jauh yang bermasalah.
MattoxBeckman
5
Jika Anda mengikuti langkah-langkah ini harus bekerja: devcenter.heroku.com/articles/debugging-clojure
Avanz
6
Sudah dijawab bro. stackoverflow.com/questions/22908315/... Ini bukan apa yang Anda cari tetapi itu akan membantu
prestotron

Jawaban:

1

Jika repl masih berjalan dari jack-in cider sebelumnya, Anda harus menggunakan perintah cider untuk menghubungkan ke instance yang sedang berjalan, atau menghentikan yang sebelumnya sebelum memulai yang baru

From Here ` Clojure - masalah koneksi menjalankan kembali cider-jack-in

Lihat juga ini https://devcenter.heroku.com/articles/debugging-clojure

Syed Ali Naqi
sumber