ฉันจะทำให้ 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

ผลลัพธ์

ดูเหมือนว่า emac จะแขวน ถ้าฉันไปที่*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 อยู่บนเส้นทางของคุณ" (และฉันก็ทำเช่นนั้นทั้งสองเครื่อง ... )


44
(/ 1 0)- แฮงค์นี้เหรอ? อาจพยายามประเมินอนันต์ ... ;-)
firefrorefiddle

8
ลองใช้Attempt 2ในเครื่องท้องถิ่นของคุณมันใช้ได้ไหม? ที่เริ่มต้นlein ritz-replแล้วเชื่อมต่อจาก emacs
Guillermo Winkler

4
ใช่เริ่มต้นจากเครื่องท้องถิ่นของฉันทำงานได้ดี มันเป็นแค่การเชื่อมต่อระยะไกลที่มีปัญหา
MattoxBeckman

5
หากคุณทำตามขั้นตอนเหล่านี้ควรใช้งานได้: devcenter.heroku.com/articles/debugging-clojure
Avanz

6
ตอบแล้วครับ stackoverflow.com/questions/22908315/…มันไม่ใช่สิ่งที่คุณกำลังมองหา แต่มันจะช่วยได้
prestotron

คำตอบ:


1

หากเร็กคอร์ดยังคงรันอยู่จาก cider-jack-in ก่อนหน้าคุณควรใช้คำสั่ง cider เพื่อเชื่อมต่อกับอินสแตนซ์ที่กำลังรันอยู่หรือหยุดการทำงานก่อนหน้านี้ก่อนที่จะเริ่มอันใหม่

จากที่นี่ ` Clojure - ปัญหาการเชื่อมต่อกำลังเรียกใช้ cider-jack-in อีกครั้ง

ดูสิ่งนี้ด้วย https://devcenter.heroku.com/articles/debugging-clojure

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.