2010-04-24 18 views
52

Tôi đang viết một ứng dụng web bằng cách sử dụng nhẫn và clojure. Tôi đang sử dụng bộ chuyển đổi cầu nối cho máy chủ phát triển và emacs/SLIME cho IDE. Trong khi wrap-reload không hỗ trợ, run-jetty chặn phiên slime của tôi và tôi muốn có thể bắt đầu/dừng nó theo ý muốn mà không cần phải chạy nó trong một phiên đầu cuối riêng biệt. Lý tưởng nhất, tôi muốn xác định một đại lý máy chủ và chức năng start-server và stop-server sẽ bắt đầu/dừng máy chủ bên trong tác nhân. Điều này có thể không?Làm thế nào để dừng máy chủ cầu nối trong clojure?

Trả lời

97

Tôi thường có một dòng trong ứng dụng của chiếc nhẫn của tôi trông giống như sau:

(defonce server (run-jetty #'my-app {:port 8080 :join? false})) 

này ngăn khóa lên REPL. Nó cũng cho phép tôi biên dịch lại tệp này mà không lo lắng rằng máy chủ của tôi sẽ được xác định lại. Nó cũng cho phép bạn tương tác tại REPL như vậy:

user=> (.stop server) 

user=> (.start server) 
+0

Chính xác những gì tôi đang tìm kiếm! –

+0

Tôi nhận được lỗi này: 'Không tìm thấy trường phù hợp: bắt đầu cho lớp clojure.lang.PersistentList [Lớp bị ẩn java.lang.IllegalArgumentException]'. Bất kỳ ý tưởng? – Tyler

+3

Đừng bận tâm, vấn đề là sự cố định không tái phạm - hãy tưởng tượng điều đó :) – Tyler

1

Tài liệu Jetty có một số thông tin về số graceful shutdown của Cầu tàu. Đó có thể là không đủ thông tin nhưng nó có thể giúp bạn bắt đầu.

Tôi chưa bắt đầu chơi với compojure, nhưng nói chung tôi thích làm việc với Tomcat hơn. Nó đầy đủ tính năng hơn; trong số những thứ khác, có một API được làm tài liệu để khởi động và tắt nó, nó lắng nghe lệnh tắt trên một cổng chuyên dụng; có các nhiệm vụ ant để thực hiện điều này và tất nhiên chúng có thể được gọi từ một ứng dụng Java. Tôi chỉ không biết loại Compojure ma thuật nào kết nối REPL với một thể hiện đang chạy của thùng chứa Web, và nếu/làm thế nào nạp lại lớp tự động xảy ra ... hy vọng một người khác sẽ có thể cung cấp thêm thông tin.

+0

Vâng, trong trường hợp này, tôi thậm chí không sử dụng compojure, tôi chỉ sử dụng ring.jetty.adapter để bắt đầu Jetty máy chủ. Lý do để đi với Jetty là vì vậy tôi không phải biên dịch lại mọi lúc. –

+1

Wow, Jetty cho phép bạn làm điều đó? Mát mẻ. Sẽ phải học về điều đó sớm thôi. Cảm ơn! –

Các vấn đề liên quan