2012-07-18 68 views
0

我正在編寫一個rails應用程序,該應用程序需要跟蹤用戶的狀態以查看它們是否可用,忙碌或脫機。我使用的是private_pub gem,它使用了下面的Faye。當用戶登錄時,他訂閱了頻道/用戶/ [:user_id]。我想在使用Faye的訂閱事件監聽器時,將用戶的狀態更新爲ONLINE。我加入這個代碼在private_pub.ru文件的末尾:更新faye事件監聽器中的活動記錄

server = PrivatePub.faye_app 

server.bind :subscribe do |client_id, channel| 
    if /\/user\/*/.match(channel) 
     m = /\/user\/(?<user_id>\d+)/.match(channel) 
     user_id = m[:user_id] 
    end 
    user = User.find(user_id) 
    user.status = 1 # 1 means online 
end 

run server 

的問題是每次用戶訂閱,瘦服務器報告:

[ERROR] [Faye::RackAdapter] uninitialized constant User 

我想我需要要求某些文件是能夠在機架文件中使用activerecords。但我不知道如何。

感謝您的任何幫助。

回答

1

在我們的項目中,我們決定使用redis進行類似的情況。

的Gemfile:

gem 'redis-objects' 

王菲:使用Redis的-RB寫作狀態

require 'redis' 
Redis.current = Redis.new(:host => '127.0.0.1', :port => 6379) 

# init faye server 
... 

server.bind(:subscribe) do |client_id, channel| 
    if /\/user\/*/.match(channel) 
    m = /\/user\/(?<user_id>\d+)/.match(channel) 
    Redis.current.set("user:#{m[:user_id]}:online_status", "1") 
    end 
end 

Rails的:使用Redis的對象寶石在用戶模式閱讀它。

class User < ActiveRecord::Base 
    include Redis::Objects 
    value :online_status 
end 

@user.online_status # returns "1" if channel is connected 

希望這會有所幫助。

+0

無論如何,儘管它沒有解決我的問題。但它非常有幫助。我現在也在使用redis了! – Chaoran 2013-01-16 17:39:25