Làm cách nào tôi có thể khiến nrepl-ritz-jack-in hoạt động từ xa qua TRAMP / Emacs


299

Những gì tôi muốn:

Tôi có một chương trình clojure trên một trang web từ xa, hãy gọi nó mccarthy. Những gì tôi muốn làm là kết nối với một nrepl-ritztừ máy tính xách tay của tôi, tốt nhất là sử dụng nrepl-ritz-jack-in. Giắc cắm hoạt động tốt cho một chương trình cục bộ, nhưng dường như không kết nối với một chương trình từ xa.

Cố gắng 1

C-x C-f trên /mccarthy:code/program/project.clj

(require 'nrepl-ritz)

M-x nrepl-ritz-jack-in

Kết quả

Emacs xuất hiện để treo. Nếu tôi đi đến *nrepl-server*bộ đệm, tôi thấy điều này:

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)

(và hàng tấn các dòng khác, quá ...)

Tôi đang sử dụng driptrên máy tính xách tay của mình, nhưng không bật mccarthy, vì vậy rõ ràng nrepl-ritz-jack-inlà không phát hiện ra rằng đó là một tệp từ xa. Thường xuyên cũ nrepl-jack-insẽ làm việc như mong đợi trong trường hợp này, tuy nhiên.

Cố gắng 2

Tôi cũng đã thử bắt đầu nrepl-ritzsử dụng leintrên mccarthy:

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

Từ máy tính xách tay của tôi, tôi chuyển tiếp một cổng để địa phương 42874kết nối với 42874trên mccarthy:

ssh -L 42874:localhost:42874 -N mccarthy

Sau đó, từ Emacs địa phương của tôi:

(require 'nrepl-ritz)

M-x nrepl

Tổ chức: 127.0.0.1

Hải cảng: 42874

Điều này cho tôi một kết nối:

; nREPL 0.1.7-preview
user> 

Vì vậy, để kiểm tra nó, tôi chạy

M-x nrepl-ritz-threads

Nó cho tôi một bảng chủ đề tốt đẹp.

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

user> (/ 1 0)

Kết quả

Điều này bị treo, nhưng đôi khi hiển thị một bộ đệm gỡ lỗi ẩn với một số khởi động lại có sẵn. Nếu tôi bảo nó chuyển ngoại lệ trở lại chương trình, nó sẽ không bao giờ trả lại quyền kiểm soát cho REPL.

Tôi đã thực hiện rất nhiều tìm kiếm nhưng không thể có được bất cứ điều gì cụ thể hơn là "đảm bảo rằng lein đang trên đường của bạn" (Và tôi đã làm điều đó, trên cả hai máy ...).


44
(/ 1 0)- cái này treo? Có lẽ đang cố gắng đánh giá vô cùng ... ;-)
firefrorefiddle

8
Hãy thử Attempt 2trong máy cục bộ của bạn, nó hoạt động tốt chứ? Đó là bắt đầu lein ritz-replvà sau đó kết nối từ emacs
Guillermo Winkler

4
Vâng, bắt đầu từ máy cục bộ của tôi hoạt động tốt. Đó chỉ là kết nối từ xa có vấn đề.
MattoxBeckman

5
Nếu bạn làm theo các bước này, nó sẽ hoạt động: devcenter.heroku.com/articles/debugging-clojure
Avanz

6
Đã trả lời bro. stackoverflow.com/questions/22908315/ Từ Đó không chính xác là những gì bạn đang tìm kiếm nhưng nó sẽ giúp ích
uy tín

Câu trả lời:


1

Nếu thay thế vẫn đang chạy từ jack-in-cider trước đó, bạn nên sử dụng cidercommand để kết nối với phiên bản đang chạy hoặc dừng trước đó trước khi bắt đầu một phiên bản mới

Từ đây ` Clojure - vấn đề kết nối chạy lại cider-jack-in

Cũng thấy điều này https://devcenter.heroku.com/articles/debugging-clojure

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.