레일

2011-08-05 4 views
2
내가 저거 너트, 레디 스, SQLite는과 레일을 사용하여 간단한 실시간 채팅을 짓고 있어요

3.1레일

다른 연결이 끊어졌습니다 때이 예를 들어 (모든 사용자에게 새 메시지를 작성하려는 그 창을 닫았습니다.) 이것은 Juggernaut의 클라이언트 연결이 끊긴 이벤트를 듣는 것입니다.

Juggernaut docs 내가 서버 측에서이 작업을 수행 할 수 있습니다 말한다 (루비)

Juggernaut.subscribe do |event, data| 
    # Use event/data 
end 

문제는 내 레일 응용 프로그램 내에서이 코드를 삽입해야 어디 모르겠입니다 (컨트롤러, 모델, 관찰자?) . 나는 그것을 모델에 넣으려고했으나, 서버는 그 코드 덩어리를 가진 어떤 요청에도 모델에 응답하지 않는다.

서버 쪽에서 해당 이벤트를 수신해야한다고 생각합니다. 사용자가 연결을 끊었을 때 창을 닫았 기 때문에 해당 사용자의 "클라이언트 쪽"이 없기 때문입니다.

아마도 저거 노우 (Juggernaut)의 작동 방식에 대해 빠뜨린 것 같습니다. 어떤 도움을 주시면 감사하겠습니다.

+0

코드 사용 예는 다음과 같습니다. https://github.com/maccman/holla/blob/original/app/models/roster.rb – Awea

+0

예, 이전에 본 적이 있지만 정상적인 레일 모델이되어야합니다. 이 모델은 SuperModel :: Base에서 상속 받았으며 ActiveRecord :: Base에서는 상속받지 않았습니다. –

+0

https://github.com/maccman/supermodel, 그것은 일반적인 레일 프로젝트가 아니며 SuperModel에 의해 ActiveRecord를 대체합니다 – Awea

답변

6

좋아, 마지막으로 나 자신을 대답 해요 :

내가 찾은 문제는 실행중인 프로세스가 Juggernaut.subscribe를 호출 할 때 저거넛 이벤트가 트리거 될 때까지 정지한다는 것입니다. 따라서 Juggernaut를 서버 프로세스에서 호출 할 수 없으므로 해당 코드를 실행하기 위해 새 프로세스가 필요합니다.

내 코드는 이제 다음과 같습니다 모델 :

class MyModel < ActiveRecord::Base 

    class << self 
    def subscribe 
     Juggernaut.subscribe do |event, data| 
     case event 
      when :subscribe 
      # do something 
      when :unsubscribe 
      # do something else 
     end 
     end 
    end 
    end 

end 

그리고 내가 루비 스크립트 MyApp를/스크립트/juggernaut_listener 있습니다

#!/usr/bin/env ruby 
require File.expand_path('../../config/environment', __FILE__) 

puts "Starting juggernaut listener" 
MyModel.subscribe 

그래서 서버를 점심 후 내가 점심 필요를 Juggernaut 리스너는 다음과 같습니다.

./script/participations_listener 

(참고로 + x 스크립트로).

누군가에게 도움이되기를 바랍니다.