Việc triển khai Redis#subscribe
là một vòng lặp sẽ đảm nhận quyền kiểm soát luồng hiện tại để lắng nghe các sự kiện. Điều này có nghĩa là quá trình khởi động bị tạm dừng khi thả đăng ký vào ngữ cảnh của lớp Rails theo cách bạn đã hiển thị.
Bạn có thể thử gói cuộc gọi trong một chuỗi, nhưng cách tiếp cận này thực sự sẽ tạo một đăng ký mới mỗi khi lớp này được tải trong một quy trình mới, như bảng điều khiển rails hoặc nhiều kỳ lân. Ngoài ra, bạn phải cẩn thận về trạng thái chia sẻ và các vấn đề về luồng khác. Đây có lẽ không phải là điều bạn muốn.
Tốt nhất bạn nên bắt đầu một quy trình khác tải môi trường rails và đăng ký redis riêng biệt với (các) quy trình phục vụ các yêu cầu web. Nó có thể là một nhiệm vụ cào như sau:
namespace :subscribe do
task :redis => :environment do
$redis.subscribe("bravo") do |on|
on.message do |channel, message|
Rails.logger.info("Broadcast on channel #{channel}: #{message}")
OtherClass.some_method # yada yada
end
end
end
end