Tag: Ruby on Rails

Ruby 1.9.3, Gruff and ZeroDivisionError: divided by 0

After updating Ruby from 1.9.2 to 1.9.3, Gruff stopped working. When I was trying to generate charts, it would throw following exception:

ZeroDivisionError: divided by 0
./gems/gruff-0.3.6/lib/gruff/base.rb:1066:in `label'
./gems/gruff-0.3.6/lib/gruff/base.rb:590:in `setup_graph_measurements'
./gems/gruff-0.3.6/lib/gruff/base.rb:532:in `setup_drawing'
./gems/gruff-0.3.6/lib/gruff/base.rb:508:in `draw'
./gems/gruff-0.3.6/lib/gruff/line.rb:53:in `draw'
./gems/gruff-0.3.6/lib/gruff/base.rb:493:in `to_blob'

How to fix this?

If you look into Gruff source code, you will see, that the error occurs in label method:

def label(value)
  label = if ((@spread.to_f % @marker_count.to_f == 0) || 
    !@y_axis_increment.nil?)
    value.to_i.to_s
  elsif @spread > 10.0
    sprintf("%0i", value)
  elsif @spread >= 3.0
    sprintf("%0.2f", value)
  else
    value.to_s
  end

  parts = label.split('.')
  parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{THOUSAND_SEPARATOR}")
  parts.join('.')
end

As you can see (or not) it happens, that the @marker_count variable is equal 0. When it happens, we try to divide by zero and the ZeroDivisionError exception is raised. To prevent this from happening, we need to patch this method (until the proper fix is released). Lets overwrite this method:

module Gruff
  class Base
    def label(value)
      label = if @marker_count.to_f == 0
        value.to_i.to_s
      elsif ((@spread.to_f % @marker_count.to_f == 0) || 
        !@y_axis_increment.nil?)
        value.to_i.to_s
      elsif @spread > 10.0
        sprintf("%0i", value)
      elsif @spread >= 3.0
        sprintf("%0.2f", value)
      else
        value.to_s
      end

      parts = label.split('.')
      parts[0].gsub!(/(\d)(?=(\d\d\d)+(?!\d))/, "\\1#{THOUSAND_SEPARATOR}")
      parts.join('.')
    end
  end
end

Thats all. First we check if @marker_count is equal 0 and if so, we return the whole value casted to integer. The rest of method stays the same.

ERR unknown command blpop for Resque, Redis and Rails

Recently I've created a simple "like" Pingdom app, that helps me monitor my deployed projects. Problems started, when I wanted to deploy this app, on a server where Redis is already working. When I've been starting resque workers, they've been throwing me same error:

rake aborted!
ERR unknown command 'blpop' 

I figured out, that my Redis instance was not up2date. however it was the most recent in repos. How to fix this? We need to add rwky/redis to our repos list:

sudo add-apt-repository ppa:rwky/redis
sudo apt-get update
sudo apt-get install redis-server

and thats all. After this, Resque works like a charm!

Copyright © 2025 Closer to Code

Theme by Anders NorenUp ↑