Tôi nghĩ rằng các vấn đề chính ở đây là bạn cần một giải pháp khác để nhắn tin (IPC giống, chứ không phải IM) thay vì cố gắng bẻ cong Resque là "chỉ" một hàng đợi. Một số tùy chọn là amqp gem (giao thức AMQP) hoặc zmq gem (giao thức ZeroMQ), nhưng bạn cũng có thể sử dụng ổ cắm UNIX cũ thông qua thư viện chuẩn của Ruby Lớp ổ cắm (good examples). Tất cả đều có ưu và khuyết điểm khác nhau, vì vậy nó có thể tùy thuộc vào bạn.
Sau đó, sự tương tác có thể trông giống như một cái gì đó như thế này:
- Bot bắt đầu.
- Bot bắt đầu nghe tin nhắn IPC.
- Bot nhận được một truy vấn từ người gửi (thông qua XMPP).
- Bot xếp hàng qua công việc Resque.
- Công việc gọi ứng dụng Rails qua HTTP.
- Ứng dụng Rails thực hiện chia sẻ công việc của mình.
- Ai đó hoặc một cái gì đó giải quyết bất cứ điều gì là truy vấn và nhập một kết quả thông qua ứng dụng Rails.
- Ứng dụng Rails gửi kết quả bằng cách sử dụng một số phương pháp IPC cho bot.
- Bot gửi kết quả đến người gửi ban đầu (qua XMPP).
Có thể có một số thay đổi như bình thường. Ví dụ, tôi nghĩ bạn không cần Resque. Bot có thể chuyển yêu cầu ngay lập tức tới ứng dụng Rails nhưng nó phụ thuộc vào tải, thời gian trả lời bạn muốn đạt được, kiến trúc hiện tại, v.v. Có thể công việc Resque có thể đợi ứng dụng Rails trả lại kết quả và sau đó là công việc (không phải ứng dụng Rails) sẽ sử dụng IPC. Có các biến thể khác ...
Tôi có cần phải viết một nhiệm vụ cào để start/stop/reload bot
Không, bạn không. Đó là vào bạn như thế nào và khi bạn chạy nó. Sau khi tất cả, Rake có thể được xem như là một cách thuận tiện để đặt nhiều kịch bản Ruby với nhau và tạo ra sự phụ thuộc giữa chúng. Nếu bạn nghĩ rằng sẽ có một số nhiệm vụ khác xung quanh bot hơn là chỉ chạy nó (một số dọn dẹp, triển khai, vv), nó sẽ là tốt để sử dụng Rake cho thuận tiện. Nếu chưa, logic của refactor bot đến lớp và sử dụng nhiệm vụ Rake để khởi tạo nó. Nhưng nó có lẽ sẽ tốt nếu bạn rời khỏi nó và chỉ chạy kịch bản của bạn như là (sử dụng monit, script init.d tùy chỉnh của bạn, ad-hoc, vv).
Nếu tôi chạy nó mà không có cào (được cho là quá trình độc lập được Monit giám sát) thì làm cách nào để giao tiếp với Resque hoặc truy cập mô hình đường ray?
Rake không ảnh hưởng đến điều này. Từ quan điểm hệ điều hành, nếu bạn chạy Resque thông qua Rake và bot của bạn thông qua Rake hoặc như là một kịch bản độc lập, nó không quan trọng, họ sẽ được các quá trình khác nhau anyway. Cũng nên nhớ rằng Resque cần Redis để chạy ở đâu đó.
Tôi biết những câu hỏi có thể là rất tầm thường
Không gì cả. Tôi nghĩ rằng nó sẽ mất một thời gian trước khi các vấn đề như có thể được coi là tầm thường.
Các khởi đầu/dừng của bot là một mối quan tâm riêng biệt. Monit là một lựa chọn cho điều đó, như là một công cụ như quản đốc (https://github.com/ddollar/foreman). Câu hỏi thực sự đối với tôi là liệu bạn có cần bot làm việc với ứng dụng ruby của bạn một cách không đồng bộ hoặc đồng bộ. Nếu bạn có thể thoát khỏi giao diện đồng bộ hóa, bot của bạn chỉ có thể thực hiện cuộc gọi HTTP đến ứng dụng đường ray và cuộc sống thật đơn giản. :) –