【问题标题】:number of guests in ruby on railsruby on rails 的客人数量
【发布时间】:2010-07-24 23:37:05
【问题描述】:

有没有一种简单的方法可以计算访问我的 rails 应用的活跃用户或访客(未登录用户)的数量?

现在我有一种方法可以计算过去 15 分钟内登录用户的数量,方法是为用户设置一个 last_seen_at 列。但是我不想使用数据库来计算活跃用户或访客的总数。

我正在使用 Rails 3。

【问题讨论】:

  • 从数据库中获取它有什么问题?有什么原因吗?

标签: ruby-on-rails ruby-on-rails-3


【解决方案1】:

一般来说,统计过去 X 分钟内看到的用户数是您想要的。问问自己,您想如何定义在线用户?它们不会一直连接到服务器,它们只是不时发出一些请求。

【讨论】:

  • 嗯,是的。最后15分钟就好了。我的意思是我想我可以有一个模型/表来记录每个 IP 并在每次用户访问另一个页面时触摸更新的列。但我不知道这是否有效。
  • 我只需将 last_seen_at 和 last_seen_from_ip 列添加到您的用户表中,并在每个用户的操作中使用原始(高效)插入来更新它。
【解决方案2】:

您可以使用Juggernaut(使用 Flash)将用户的网络浏览器连接到您的 ruby​​ 应用程序。然后,您可以使用 show_clients 方法遍历所有已注册的客户端。

【讨论】:

  • 我不知道 Juggernaut 是否适用于 Rails 3。我在一个新应用上尝试过,但似乎没有用。
【解决方案3】:

如果对 session_store 使用 active_record,您可以轻松地查询会话表以及您的活跃用户与用户表的差异,如下所示:

time_period = 24.hours.ago
number_of_active_users = User.where('updated_at > ?', time_period).count
number_of_active_sessions = ActiveRecord::SessionStore::Session.where('updated_at > ?', time_period).count
number_of_guests = number_of_active_sessions - number_of_active_users

配置 session_store 以使用 active_record 的说明位于 config/initializers/session_store.rb。

您需要添加一个后台工作人员来清除陈旧的会话,以免表不必要地膨胀。

【讨论】:

    猜你喜欢
    • 2011-01-30
    • 1970-01-01
    • 2013-02-02
    • 2011-11-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    相关资源
    最近更新 更多