Не можете нажать Mixpanel в отложенной работе?

Я использую delayed_job для выполнения какой-то фоновой задачи. Между ними я хочу отслеживать некоторые события. Я использую жемчужину Mixpanel для отслеживания событий. В контроллере все работает отлично. Но не в отложенной работе.

Код, который я использую

@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:in 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:in 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:in start'\n/Users/mohit/.rvm/rubies/ruby-1.8.7-p334/lib/ruby/1.8/benchmark.rb:308:inrealtime'\n/ Пользователи/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/g ems/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/ Пользователи/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/Пользователи/mohit/.rvm/gems/ruby-1.8.7-p334/gems/rake-0.9.2/bin/rake:32\n/Пользователи/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 в фоновом процессе.


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, но это корень вашей проблемы.

Если в документации 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
И более того, когда я отправил этот запрос в их поддержку, я получил в ответ следующее: Ruby-библиотека Mixpanel поддерживается сообществом, и я не использовал ее. Пожалуйста, не стесняйтесь обновлять его для работы в вашей среде, это должно быть довольно просто. - person Mohit Jain; 08.08.2011