मैं TRAMP / Emacs पर दूरस्थ रूप से nrepl-ritz-jack-in काम कैसे कर सकता हूं


299

मैं क्या चाहता हूँ:

मेरे पास एक दूरस्थ साइट पर क्लोजर प्रोग्राम है, चलो इसे कॉल करें mccarthy। मैं जो करना चाहता हूं वह nrepl-ritzअपने लैपटॉप से कनेक्ट करना है , अधिमानतः उपयोग करना nrepl-ritz-jack-in। जैक एक स्थानीय कार्यक्रम के लिए ठीक काम करता है, लेकिन एक दूरस्थ कार्यक्रम से कनेक्ट नहीं होता है।

प्रयास करना १

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हालांकि, इस मामले में उम्मीद के मुताबिक नियमित पुराने काम करेंगे।

प्रयास २

मैं भी एक शुरू करने की कोशिश की 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 को नियंत्रण वापस नहीं देता है।

मैंने बहुत सारी खोजें की हैं लेकिन "अपने रास्ते पर लेइन सुनिश्चित करें" की तुलना में अधिक विशिष्ट कुछ भी प्राप्त करने में सक्षम नहीं हैं (और मैंने ऐसा किया, दोनों मशीनों पर ...)।


44
(/ 1 0)- यह लटका हुआ है? शायद अनंत का मूल्यांकन करने की कोशिश कर रहा है ... ;-)
firefrorefiddle

8
Attempt 2अपने स्थानीय मशीन में कोशिश कर रहा है , यह ठीक काम करता है? यह शुरू हो रहा है lein ritz-replऔर फिर emacs से जुड़ रहा है
Guillermo Winkler

4
हां, मेरी स्थानीय मशीन से शुरुआत करके ठीक काम हुआ। यह सिर्फ रिमोट कनेक्शन है जिससे परेशानी होती है।
मैटॉक्सबेकमैन

5
आप इन चरणों का पालन अगर यह काम करना चाहिए: devcenter.heroku.com/articles/debugging-clojure
Avanz

6
पहले से ही उत्तर भाई। stackoverflow.com/questions/22908315/… यह वही नहीं है जो आपकी तलाश में है बल्कि यह मदद करेगा
prestotron

जवाबों:


1

यदि उत्तर अभी भी पिछले साइडर-जैक-इन से चल रहा है, तो आपको रनिंग इंस्टेंस से कनेक्ट करने के लिए साइडरकॉमैंड का उपयोग करना चाहिए, या नया शुरू करने से पहले पिछले को रोकना चाहिए

यहाँ से ` क्लोजर - कनेक्शन मुद्दा साइडर-जैक-इन फिर से चल रहा है

इसे भी देखें https://devcenter.heroku.com/articles/debugging-clojure

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.