rubychartbeat

Getting symbol conversion error when trying to call method using a gem?


I'm trying to get some chartbeat.com stats for my site using their API. Using the Python chartbeat egg works fine but with Ruby I'm having difficulty getting past the first phase. Ultimately, my goal is to pull the chartbeat quickstats array (current users, rate per sec., etc.) and send it to graphite, and daemonize the whole thing.

I have a decent understanding of programming methodologies, theories, and practice, I'm just very green with Ruby syntax, and tried reading up on symbols, methods (private/public) and can't seem to get Ruby to play nice with my brain. I think that is most likely where my problem is.

From what I understand, I don't have to do a puts or anything like that. Calling the quickstats method on c should print whatever is returned from the chartbeat API via the GEM.

The chartbeat gem is from https://github.com/ashaw/chartbeat. My Ruby is Ruby 1.9.3p362 (2012-12-25 revision 38607) [x86_64-darwin12].

I get this when I run my script:

/opt/local/lib/ruby1.9/gems/1.9.1/gems/chartbeat-0.2.2/lib/chartbeat.rb:31:in `[]': can't convert Symbol into Integer (TypeError)
from /opt/local/lib/ruby1.9/gems/1.9.1/gems/chartbeat-0.2.2/lib/chartbeat.rb:31:in `block in method_missing'
from /opt/local/lib/ruby1.9/gems/1.9.1/gems/chartbeat-0.2.2/lib/chartbeat.rb:30:in `each'
from /opt/local/lib/ruby1.9/gems/1.9.1/gems/chartbeat-0.2.2/lib/chartbeat.rb:30:in `method_missing'
from /Users/jed/Documents/workspace/chartbeat2graphite/c2b.rb:8:in `<main>'

The code is:

require 'chartbeat'
require 'graphite'
require 'daemonize'

c = Chartbeat.new(:apikey => "sadfklj09238402938" , :host => "lipsum.com")

c.quickstats :path => '/'

Solution

  • I'm not sure but the gem you are using actually might be not working properly. It seems the gem has not been updated for two years.

    Looking at the forks I found qhduong/chartbeat that updates it to use a new URI, or DramaFever/chartbeat that did the same but there are differences. I don't know if they impact the way it runs or not.