2016-02-24 37 views
8

Tôi gặp sự cố khi đếm phiên trong Mixpanel cho ứng dụng Rails của tôi. Về cơ bản, tôi đang kích hoạt sự kiện theo dõi mixpanel "Phiên" mỗi khi có ai đó truy cập một trang từ một URL bên ngoài (không phải mydomain.com).gặp sự cố khi theo dõi phiên trong đường ray

Vì vậy, tôi có một cái gì đó như thế này trong application_controller.rb tôi trước khi móc:

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 

Để gỡ lỗi, tôi có thể nhìn thấy "!!!!! TRACKED 4 !!!!!!" trong bảng điều khiển của tôi khi truy cập trang từ tài khoản của tôi (id người dùng: 4). Nhưng khi tôi ghé thăm MixPanel, không có sự kiện nào xuất hiện trên bảng điều khiển.

Tôi có thể nhận sự kiện phiên để đăng nhập nếu tôi truy cập trong trình duyệt ẩn danh (có id: nil) HOẶC nếu tôi truy cập ẩn danh, sau đó đăng nhập một cách rõ ràng vào tài khoản của tôi. Nhưng mục tiêu là phải đăng ký sự kiện bất cứ lúc nào người dùng truy cập từ url bên ngoài.

Các sự kiện mixpanel khác của tôi đang hoạt động tốt. Bất kỳ ý tưởng nào tại sao sự kiện phiên sẽ không được kích hoạt trong trường hợp này? Làm thế nào tôi nên đi về tiếp tục gỡ lỗi này?

Cảm ơn!

Chỉnh sửa: Tôi đang sử dụng để thực hiện Mengpaneel ruby, đây là thiết lập của tôi:

initializers/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' có thể được biểu diễn tốt hơn 'id = current_user? current_user.id: nil'. Thậm chí tốt hơn, bạn có thể loại bỏ toán tử ternary và sử dụng 'mixpanel.track (" Session "," ID "=> current_user.id)' vì 'track' xuất hiện để chấp nhận giá trị' nil'. – Mohamad

+0

@Mohamad nhưng nếu không current_user, sau đó sẽ không current_user.id ném một lỗi? –

+0

Có, nó sẽ - xin vui lòng bỏ qua phần sau của bình luận của tôi, nhưng lời khuyên trước đó vẫn đứng về đơn giản hóa các nhà điều hành ternary. : D – Mohamad

Trả lời

0

Bất kỳ ý tưởng tại sao sự kiện phiên sẽ không được kích hoạt trong trường hợp này? Làm thế nào tôi nên đi về tiếp tục gỡ lỗi này?

Để trả lời câu hỏi của bạn, tôi bắt đầu bằng cách đảm bảo rằng tôi đang gửi sự kiện này đúng cách.

Thêm ghi nhật ký ở mọi nơi! Trong phương pháp theo dõi mengpaneel của:

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

    properties = @properties.merge(properties) 

    super(@distinct_id, event, properties) 
end 

Tôi muốn kiểm tra những gì @disable_all_events@disabled_events được thiết lập để, bằng cách cập nhật đá quý địa phương của tôi để đăng những thuộc tính. Tôi cũng đăng nhập kết quả của việc gọi số super, trong trường hợp nó trả về một số loại phản hồi lỗi. Hoặc sử dụng ruby ​​debugger.

Tôi biết bạn đã nói các cuộc gọi khác đang hoạt động, vì vậy có lẽ đó chỉ là cuộc gọi này đang bị ngắt âm thầm.

Một tùy chọn khác là tìm ra cách lấy proxy ở giữa các yêu cầu HTTP (tức là Charles).

Các vấn đề liên quan