2016-02-24 1 views
8

У меня проблема с подсчетами сеансов в Mixpanel для моего приложения Rails. В принципе, я запускаю событие отслеживания mixpanel «Session» каждый раз, когда кто-то посещает страницу с внешнего URL-адреса (а не mydomain.com).Неполадка отслеживания сеанса в рельсах

Так что у меня что-то вроде этого в моем application_controller.rb, прежде чем крючок:

def count_session 
    referral = request.referer 
    root_url = Figaro.env.root_uri 

    ### If there's a referral and it includes the root domain, then don't 
    ### track because it's the same session 

    if referral && referral.include?(root_url) 
     puts "!!!! NOT TRACKED !!!!!" 
    else 
     puts "!!!!! TRACKED #{id} !!!!!!" 
     mixpanel.track("Session", "ID" => current_user.id, "Version" => Figaro.env.ab_version) 
    end 
    end 

Для отладки, я могу видеть «!!!!! ГУСЕНИЧНЫЙ 4 !!!!!!» в моей консоли при посещении страницы с моей учетной записи (идентификатор пользователя: 4). Но когда я нахожусь в MixPanel, на панели инструментов нет события.

Я могу получить событие сеанса для входа в журнал, если я посещу в браузере инкогнито (с id: nil) ИЛИ, если я нахожусь в инкогнито, то явным образом войдите в свою учетную запись. Но цель состоит в том, чтобы регистрировать событие в любое время, когда пользователь посещает внешний URL.

Мои другие мероприятия в mixpanel работают нормально. Любая идея, почему событие сеанса не будет срабатывать в этом случае? Как я должен продолжить эту отладку?

Спасибо!

Edit: Я использую Mengpaneel для реализации рубинового, вот моя установка:

Инициализаторы/mengpaneel.rb:

Mengpaneel.configure do |config| 
    config.token = Figaro.env.mixpanel_token 
end 

application_controller.rb:

before_action :setup_mixpanel 
before_action :count_session 

def setup_mixpanel 
    return unless user_signed_in? 

    mengpaneel.setup do 
     mixpanel.identify(current_user.id) 

     mixpanel.people.set(
      "ID"    => current_user.id, 
      "$email"   => current_user.email, 
      "$created"  => current_user.created_at, 
      "$last_login"  => current_user.current_sign_in_at 
     ) 
    end 
    end 
+0

FYI: 'current_user? id = current_user.id: id = nil' может быть лучше выражено 'id = current_user? current_user.id: nil'. Еще лучше, вы можете избавиться от тернарного оператора и использовать 'mixpanel.track (« Session »,« ID »=> current_user.id)', поскольку 'track', похоже, принимает значение« nil ». – Mohamad

+0

@Mohamad, но если нет current_user, то не будет current_user.id вывести ошибку? –

+0

Да, это было бы - пожалуйста, проигнорируйте последнюю часть моего комментария, но более ранний совет по-прежнему касается упрощения тернарного оператора. : D – Mohamad

ответ

0

Любой идея, почему событие сеанса не будет стрелять в этом случае? Как я должен продолжить эту отладку?

Чтобы ответить на вопрос об отладке вашего вопроса, я бы начал с того, что я правильно отправил это событие.

Добавить регистрацию везде! В методе трек mengpaneel в:

def track(event, properties = {}) 
    return if @disable_all_events || @disabled_events.include?(event) 

    properties = @properties.merge(properties) 

    super(@distinct_id, event, properties) 
end 

Я бы проверить, что @disable_all_events и @disabled_events устанавливаются, обновив свой местный камень, чтобы войти на эти атрибуты. Я также регистрирую результат вызова super, если он возвращает какой-то ответ об ошибке. Или используя рубин debugger.

Я знаю, что вы говорили, что работали другие звонки, так что, возможно, это просто звонок, который тихо падает.

Другим вариантом было бы выяснить, как получить прокси-сервер в середине HTTP-запросов (т. Е. Чарльз).