Using ruby-debug with Pow
Published over 3 years ago

After moving to Sam Stephenson’s awesome Pow, not being able to use ruby-debug was the primary obstacle I had adjusting to my new development environment. But as it turns out, it’s very simple to use ruby-debug with Pow.

  • Make sure you have ruby-debug in your Gemfile.
gem 'ruby-debug19' # 'ruby-debug' if using Ruby 1.8
  • Add the following to the bottom of your application’s development.rb config file:
unless $rails_rake_task
  require 'ruby-debug'

  Debugger.settings[:autoeval] = true
  Debugger.settings[:autolist] = 1
  Debugger.settings[:reload_source_on_change] = true
  Debugger.start_remote
end

This will start a debugger server.

  • Restart Pow and connect to your debugger server from a terminal:
[lifo@null ~]$ rdebug -c
Connected.

You should now see a ruby-debug console whenever the application hits a breapoint.

Being unobtrusive

If you don’t want to bother your co-workers with the ruby-debug stuff, you can configure a global .gitignore file and setup ruby-debug from an initializer that’s ignored via the global .gitignore.

  • Setup global .gitignore:
$ git config --global core.excludesfile ~/.gitignore
$ echo my_super_secret_ruby_debug_initializer.rb >> ~/.gitignore
  • Add an initializer for setting up ruby-debug:
# config/initializers/my_super_secret_ruby_debug_initializer.rb
if (Rails.env.development? || Rails.env.test?) && !$rails_rake_task
  require 'ruby-debug'

  Debugger.settings[:autoeval] = true
  Debugger.settings[:autolist] = 1
  Debugger.settings[:reload_source_on_change] = true
  Debugger.start_remote
end

You’ll still need to have ruby-debug in Gemfile. But I imagine that’ll go unnoticed!

If you are not religiously using ruby-debug already, you are certainly missing out. Here are a few resources that should help you get started:

UPDATE 1: Added $rails_rake_task checks to make sure not to start the debugger for rake tasks