2011-08-01 4 views
3

J'utilise delayed_job pour faire une tâche de fond. Entre deux, je veux suivre quelques événements. J'utilise mixpanel gem pour suivre les événements. Dans le contrôleur son fonctionnement parfaitement bien. Mais pas dans le travail retardé.Pas en mesure de frapper mixpanel en retard de travail?

code J'utilise

@original_message = Message.find(message_id) 
@mixpanel= Mixpanel::Tracker.new("43242637426346287482", message_id, true) 
@mixpanel.track_event("blank_body", {:reset_result => "sucess" }) 
//message_id is a unique for every request. 

J'ai indiqué

gem 'mixpanel' in gemfile 

       {undefined method `[]=' for 45:Fixnum 

/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/mixpanel-0.9.0 /lib/mixpanel/tracker.rb:38:in clear_queue'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/mixpanel-0.9.0/lib/mixpanel/tracker.rb:13:in initialisez '\ n/Users/mohit/projects/textadda/lib/message_job.rb: 109: dans new'\n/Users/mohit/projects/textadda/lib/message_job.rb:109:in effectuez' \ n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delay_job-2.1.4/lib/retardé/backend/base.rb: 87: dans invoke_job'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:120:in exécutez '\ n/Users/mohit/.rvm/rubies/ruby-1.8.7- p334/lib/ruby ​​/ 1.8 /timeout.rb:67:in timeout'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:120:in exécutez '\ n/Users/mohit/.rvm/rubies/ruby-1.8.7-p334/lib/ruby ​​/ 1.8/benchmark.rb: 308: dans realtime'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:119:in exécutez' \ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delay_job-2.1.4/lib/retardé/worker.rb: 177: dans reserve_and_run_one_job'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:104:in work_off '\ n/Users/mohit/.rvm/gems /ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:103:in times'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:103:in work_off '\ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7-p334 /gems/delayed_job-2.1.4/lib/delayed/worker.rb:78:in start'\n/Users/mohit/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/benchmark.rb:308:in temps réel '\ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4 /lib/delayed/worker.rb:77:in start'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:74:in loop '\ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delay_job-2.1.4/lib/delayed/worker.rb : 74: dans start'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/tasks.rb:9\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb:205:in appelez \ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb: 205: dans execute'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb:200:in chaque \ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb: 200: dans execute'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb:158:in invoke_with_call_chain '\ n/Utilisateurs/mohit/.rvm/rubies/ruby-1.8.7-p334/lib/ruby ​​/ 1.8/monitor.rb: 242: dans synchronize'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb:151:in invoke_with_call_chain' \ n/Users/mohit/.rvm/gems /ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb:144:in invoke'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/application.rb:112:in invoke_task '\ n/Users/mohit/.rvm/gems/ruby-1.8.7-p334 /gems/rake-0.9.2/lib/rake/application.rb:90:in top_level'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/application.rb:90:in chaque \ n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2 /lib/rake/application.rb:90:in top_level'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/application.rb:129:in standard_exception_handling '\ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/application.rb : 84: dans top_level'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/application.rb:62:in exécutez '\ n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/application.rb: 129: dans standard_exception_handling'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/application.rb:59:in exécutez' \ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/bin/rake: 32 \ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7- p334/bin/rake: 19: dans `load '\ n/Utilisateurs/mohit/.rvm/gems/ruby-1.8.7-p334/bin/rake: 19

EDIT

J'ai mis en mixpanel dans le processus d'arrière-plan en utilisant demande get standard. Mais je suis toujours à la recherche de la solution comment puis-je utiliser Mixpanel gem dans le processus de fond.

+0

Avez-vous essayé 'require 'mixpanel'' pour l'exiger explicitement avant de l'appeler via' Mixpanel :: Tracker ... '? – iwasrobbed

+0

@iWasRobbed Yupp .. –

+0

Quel est le message d'erreur? –

Répondre

1

Vous devez juste faire quelque chose comme ceci:

@mixpanel= Mixpanel::Tracker.new("43242637426346287482", {:REMOTE_ADDR => message_id}, true) 
@mixpanel.track_event("blank_body", {:reset_result => "sucess" }) 

Le joyau attend la deuxième variable soit l'environnement de demande, il en va obtenir l'adresse IP de cette façon, et l'envoyer à mixpanel.com. Mais je ne suis même pas sûr si cela est vraiment nécessaire, donc je pense que même un simple

@mixpanel= Mixpanel::Tracker.new("43242637426346287482", {}, true) 
@mixpanel.track_event("blank_body", {:reset_result => "sucess" }) 

devrait fonctionner.

Espérons que cela aide.

1

NOTE: CETTE RÉPONSE EST MAINTENANT PÉRIMÉS AU 15 octobre 2012 COMME LA MÉTHODE INITIALIZE NO PREND PLUS A ENV PARAMETER

L'exemple https://github.com/zevarito/mixpanelMixpanel::Tracker.new est appelé comme ceci:

Mixpanel::Tracker.new("YOUR_MIXPANEL_API_TOKEN", request.env, true) 

Dans un contexte de contrôleur, request.env est un hachage.

Dans votre code au-dessus de votre passage en message_id comme deuxième argument, qui ressemble à un entier. Désolé, ne peut pas aider plus que cela, ne sais rien à propos de la gemme mixpanel, mais c'est la racine de votre problème.

Si la documentation API de Mixpanel vous indique que vous pouvez passer un nombre entier comme deuxième paramètre, il est incorrect. Voici le code correspondant à votre erreur de https://github.com/zevarito/mixpanel/blob/master/lib/mixpanel/tracker.rb

module Mixpanel 
    class Tracker 
    def initialize(token, env, async = false) 
     @token = token 
     @env = env 
     @async = async 
     clear_queue 
    end 

# snip 

    def clear_queue 
     @env["mixpanel_events"] = [] 
    end 

# snip 

    end 
end 

En passant un entier comme second argument à la méthode initialiseur ne fonctionnera pas, parce que la classe Fixnum ne dispose pas d'une affectation de hachage ([]=), ce qui est exactement la message d'erreur que vous obtenez. Si la documentation vous indique qu'il peut s'agir d'un nombre entier, vous devez probablement signaler un problème à l'aide de mixPanel.

+0

Dans le processus de retour au sol, vous n'avez pas accès à request.env et ce devrait être juste un code unique selon mixpanel api .. –

+0

J'ai mis à jour la réponse avec un peu plus de détails, où dans l'API docs dit-il que cela peut être un nombre entier? – malclocke

+0

Depuis l'API: - Une chose à garder à l'esprit est que vous devez inclure un identifiant unique avec les données que vous envoyez depuis Ruby, car nous ne pouvons pas utiliser l'adresse IP de la requête pour le suivi de l'unicité. Vous devez inclure 'distinct_id' ou 'ip' en tant que propriété de votre requête. –

Questions connexes