Не можете да достигнете mixpanel в забавена работа?

Използвам delayed_job, за да изпълня някаква фонова задача. Междувременно искам да проследя някои събития. Използвам mixpanel gem за проследяване на събитията. В контролера работи перфектно. Но не и в „Отложена работа“.

Код, който използвам

@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.

уточнил съм

  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:ininitialize'\n/Users/mohit/projects/textadda/ lib/message_job.rb:109:in new'\n/Users/mohit/projects/textadda/lib/message_job.rb:109:inperform'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/backend/base.rb:87 :in invoke_job'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:120:inrun'\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:inrun'\n/Users/mohit/.rvm/rubies /ruby-1.8.7-p334/lib/ruby/1.8/benchmark.rb:308:in realtime'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:119:inrun'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1. 4/lib/delayed/worker.rb:177:в 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:inwork_off'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb :103:в times'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:103:inwork_off'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:78:в start'\n/Users/mohit/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/benchmark.rb:308:inrealtime'\n/ Users/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:inloop'\n/Users/mohit/.rvm/gems/ ruby-1.8.7-p334/gems/delayed_job-2.1.4/lib/delayed/worker.rb:74:in 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:incall'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems /rake-0.9.2/lib/rake/task.rb:205:in execute'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb:200:ineach'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/ rake/task.rb:200:in execute'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb:158:ininvoke_with_call_chain'\n/Users/mohit/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/monitor.rb:242:in synchronize'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/task.rb:151:ininvoke_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:ininvoke_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:ineach'\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:instandard_exception_handling'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake /application.rb:84:in top_level'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/application.rb:62:inrun'\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/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/lib/rake/application.rb:59:inrun '\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/bin/rake:32\n/Users/mohit/.rvm/gems/ruby-1.8. 7-p334/bin/rake:19:in `load'\n/Users/mohit/.rvm/gems/ruby-1.8.7-p334/bin/rake:19

РЕДАКТИРАНЕ

Внедрих mixpanel във фонов процес, използвайки стандартна заявка за получаване. Но все още търся решението как мога да използвам Mixpanel gem във фонов процес.


person Mohit Jain    schedule 01.08.2011    source източник
comment
Опитвали ли сте require 'mixpanel' да го изисквате изрично, преди да го извикате чрез Mixpanel::Tracker...?   -  person iwasrobbed    schedule 02.08.2011
comment
@Seamus Abshere актуализиран   -  person Mohit Jain    schedule 04.08.2011


Отговори (2)


Просто трябва да правите нещо подобно:

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

Скъпоценният камък очаква втората променлива да бъде средата на заявката, така че ще получи ip адреса по този начин и ще го изпрати на mixpanel.com. Но дори не съм сигурен дали това наистина е необходимо, така че мисля, че дори и просто

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

трябва да работи.

Надявам се това да помогне.

person nathanvda    schedule 08.08.2011

ЗАБЕЛЕЖКА: ТОЗИ ОТГОВОР ВЕЧЕ Е ИЗТЕРАЛ ОТ 15 ОКТОМВРИ 2012 Г., ТЪЙ КАТО МЕТОДЪТ ЗА ИНИЦИАЛИЗИРАНЕ ВЕЧЕ НЕ ПРИЕМА ENV ПАРАМЕТЪР

Примерът на https://github.com/zevarito/mixpanel Mixpanel::Tracker.new се извиква по следния начин:

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

В контекст на контролер request.env е хеш.

Във вашия код над подаването на message_id като втори аргумент, който изглежда като цяло число. Съжалявам, не мога да помогна повече от това, не знам нищо за mixpanel gem, но това е коренът на вашия проблем.

Ако документацията на API на mixpanel ви казва, че можете да подадете цяло число като втори параметър, това е неправилно. Ето кода, подходящ за вашата грешка от 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

Предаването на цяло число като втори аргумент към инициализатора няма да работи, защото класът Fixnum няма метод за присвояване на хеш ([]=), което е точно съобщението за грешка, което получавате.

Ако документацията ви казва, че това може да е цяло число, вероятно трябва да подадете проблем срещу mixpanel.

person malclocke    schedule 05.08.2011
comment
В основния процес вие нямате достъп до request.env и това трябва да е само уникален код според API на mixpanel.. - person Mohit Jain; 05.08.2011
comment
Актуализирах отговора с малко повече подробности, къде в документите на API се казва, че това може да бъде цяло число? - person malclocke; 08.08.2011
comment
От API:-- Едно нещо, което трябва да имате предвид е, че трябва да включите уникален идентификатор с данните, които изпращате от Ruby, тъй като не можем да използваме IP адреса на заявката за проследяване на уникалността. Трябва да включите или 'distinct_id', или 'ip' като свойство на вашата заявка. - person Mohit Jain; 08.08.2011
comment
И още повече, когато изпратих това запитване до тяхната поддръжка, получих това като отговор: Библиотеката Mixpanel ruby ​​се поддържа от общността и аз не съм я използвал. Моля, не се колебайте да го актуализирате, за да работи във вашата среда, трябва да е доста просто. - person Mohit Jain; 08.08.2011