2009-10-29 35 views
7

Làm thế nào bạn có thể gọi một chương trình Lisp từ một ứng dụng Rails? ... Ví dụ, cho phép người dùng cuối nhập một khối văn bản trong ứng dụng web Rails, có văn bản được chương trình Lisp xử lý và trả về kết quả cho Rails ứng dụng?Gọi Lisp từ Ruby/Rails?

Trả lời

9

Một cách đơn giản khác là có Lisp chạy máy chủ HTTP và liên hệ với Lisp từ bên ngoài thông qua các yêu cầu HTTP.

+0

Tôi không chắc chắn rằng hầu hết mọi người sẽ xem xét điều đó đơn giản như trên, nhưng có lẽ đối với người RoR, nó thậm chí có thể đơn giản hơn ... –

+3

Trong cài đặt web, đây là kiến ​​trúc hướng dịch vụ thông thường. Có rất nhiều máy chủ web cho Lisp và trao đổi dữ liệu thông qua các yêu cầu HTTP rất dễ dàng. Tất cả những gì bạn cần làm là để máy chủ Lisp đáp ứng yêu cầu POST. –

11

Có một vài cách mà tôi suy nghĩ:

  1. Thực hiện các chương trình lisp với Process. Giao tiếp với chương trình Lisp thông qua tiêu chuẩn, và có chương trình Lisp xuất kết quả của nó trên stdout.

  2. Làm tương tự như trên, nhưng thay vào đó hãy liên lạc qua số named pipes. Yêu cầu mã Ruby viết vào một đường ống có tên, sau đó có chương trình Lisp đọc từ đường ống đó và ghi dữ liệu ra qua một ống được đặt tên khác mà bạn đã đọc bằng ứng dụng Ruby của mình. Chương trình Lisp có thể chạy ở chế độ nền dưới dạng một daemon kiểm tra dữ liệu trên đường ống đến của nó, hoặc bạn có thể kích hoạt nó khi cần thiết bằng cách sử dụng các tiện ích dòng lệnh của Ruby (như trên).

  3. Tìm cầu nối Ruby-Lisp. Tôi không có kinh nghiệm với một cây cầu như vậy (tôi cũng không biết off-hand nếu một cái còn tồn tại) và tôi nghĩ rằng 2 cơ chế trên dễ dàng hơn, nhưng số dặm của bạn có thể thay đổi.

2

Điều đó phụ thuộc vào tần suất xảy ra.

  • Nếu nó một lần trong một mặt trăng màu xanh, sau đó chỉ cần chạy một lệnh backquote bắt đầu trình thông dịch lisp, hoặc bật nó và ghi vào nó.
  • Nếu nó xảy ra mọi lúc, bạn sẽ cần phải có Lisp đã chạy, vì vậy câu hỏi sau đó là làm thế nào để giao tiếp. Bất kỳ cơ chế bộ xử lý nào cũng sẽ hoạt động, nhưng tôi sẽ đề xuất một ổ cắm TCP để phát triển, thử nghiệm và linh hoạt sản xuất.
  • Nếu nó xảy ra hàng triệu lần mỗi ngày, nhưng đồ chơi Lisp sẽ đủ tốt, đó là một vấn đề đơn giản để triển khai Lisp với các lớp Ruby. Điều này được thực hiện như chương 8 của Các dự án thực tế của Ruby.
4

CL-JSON hỗ trợ JSON-RPC. Rất dễ thiết lập một máy chủ web như Hunchentoot để có dịch vụ web dựa trên Lisp mà bất kỳ thứ gì có thể nói JSON-RPC (ví dụ: this) đều có thể sử dụng.

+0

Tôi muốn tìm hiểu thêm về phương pháp này. Bạn có thể cho biết/chỉ cho tôi cách thiết lập nó không? Và những gì nó cho phép bạn làm, đó là tốt hơn so với yêu cầu HTTP POST? – mck