0

ユーザーのステータスを追跡して、利用可能か、ビジーか、オフラインかを確認する必要があるレールアプリを作成しています。下でFayeを使用するprivate_pub gemを使用しています。ユーザーがサインインすると、チャネル /user/[:user_id] にサブスクライブします。Faye のサブスクライブ イベント リスナーを使用してサブスクライブするときに、ユーザーのステータスを ONLINE に更新したいと考えています。private_pub.ru ファイルの末尾に次のコードを追加しました。

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

ラックアップファイルでアクティブレコードを使用できるようにするには、特定のファイルを要求する必要があると思います。しかし、方法がわかりません。

助けてくれてありがとう。

4

1 に答える 1

1

私たちのプロジェクトでは、同様のケースに redis を使用することにしました。

Gemfile:

gem 'redis-objects'

Faye: ステータスの書き込みには 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-objects gem を使用します。

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

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

お役に立てれば。

于 2012-07-25T18:46:10.607 に答える