mengpaneel icon indicating copy to clipboard operation
mengpaneel copied to clipboard

mixpanel.people.increment('something') fails on ServerSide

Open tnj opened this issue 9 years ago • 2 comments

When I try to use increment with Mengpaneel like:

mixpanel.people.increment 'something'

This works well with ClientSide strategy, but doesn't with ServerSide.

It looks like the arguments of people.increment are not compatible between Ruby and Javascript. Ruby version people.increment only accepts hash as it's arguments, whereas Javascript version accepts any of string, array or hash. There is a different method plus_one for that purpose.

NoMethodError: undefined method `inject' for "upload":String
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mixpanel-ruby-2.2.0/lib/mixpanel-ruby/people.rb:245:in `fix_property_dates'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mixpanel-ruby-2.2.0/lib/mixpanel-ruby/people.rb:96:in `increment'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mengpaneel-0.0.2/lib/mengpaneel/tracker.rb:84:in `block (2 levels) in <class:People>'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mengpaneel-0.0.2/lib/mengpaneel/strategy/server_side.rb:36:in `public_send'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mengpaneel-0.0.2/lib/mengpaneel/strategy/server_side.rb:36:in `block in perform_calls'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mengpaneel-0.0.2/lib/mengpaneel/strategy/server_side.rb:31:in `each'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mengpaneel-0.0.2/lib/mengpaneel/strategy/server_side.rb:31:in `perform_calls'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mengpaneel-0.0.2/lib/mengpaneel/strategy/server_side.rb:18:in `run'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/mengpaneel-0.0.2/lib/mengpaneel/strategy/async_server_side.rb:29:in `perform'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/processor.rb:75:in `execute_job'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/processor.rb:52:in `block (2 levels) in process'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/chain.rb:127:in `call'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/chain.rb:127:in `block in invoke'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-status-0.5.1/lib/sidekiq-status/server_middleware.rb:37:in `call'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/server/active_record.rb:6:in `call'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/server/retry_jobs.rb:74:in `call'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/server/logging.rb:11:in `block in call'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/logging.rb:22:in `with_context'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/server/logging.rb:7:in `call'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/chain.rb:129:in `block in invoke'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/chain.rb:132:in `call'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/middleware/chain.rb:132:in `invoke'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/processor.rb:51:in `block in process'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/processor.rb:98:in `stats'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/sidekiq-3.3.0/lib/sidekiq/processor.rb:50:in `process'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `public_send'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb:26:in `dispatch'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/calls.rb:122:in `dispatch'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cell.rb:60:in `block in invoke'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/cell.rb:71:in `block in task'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/actor.rb:357:in `block in task'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks.rb:57:in `block in initialize'
        /opt/rbenv/versions/2.2.0/lib/ruby/gems/2.2.0/gems/celluloid-0.16.0/lib/celluloid/tasks/task_fiber.rb:15:in `block in create'

For the meantime, you can rewrite the statement as hash and it works.

mixpanel.people.increment 'something' => 1

I'm not sure mengpaneel should translate this for mixpanel-ruby though.

tnj avatar Aug 06 '15 10:08 tnj

We're already doing a lot of translating from mixpanel-js code to mixpanel-ruby here: https://github.com/DouweM/mengpaneel/blob/master/lib%2Fmengpaneel%2Ftracker.rb.

Right now, increment is just passed to mixpanel-ruby directly (https://github.com/DouweM/mengpaneel/blob/master/lib%2Fmengpaneel%2Ftracker.rb#L81), but I'm fine with implementing a smarter method.

Could you submit a pull request? :)

DouweM avatar Aug 06 '15 10:08 DouweM

@DouweM Sure, I'll do that after finishing my work.

tnj avatar Aug 07 '15 05:08 tnj