Update Feb 2010 – Even though this article is now years old, these debugging tips still hold true.
There are quite a few different ways to go about analysing application errors in Ruby on Rails. I know when I first started out I found the error messages were quite cryptic.
On a typical application error there are three grey boxes. The first tells you the name of the error that ocurred.
The second shows the extracted source i.e. the line of code causing the error.
The third box tells you exactly where that line of code can be found. The key is to look past the lines beginning
/ruby/lib/ruby/gems/
and look for the first one that begins with #{RAILS_ROOT}
. It will tell you the exact file and line number you should be looking at.Output to the console
Outputing to the console is useful for quickly testing to see your code is running as you expect. Literally just use:puts "bla"
Output to the log
You can also output to the log. Sometimes outputting a variable can help. For example:logger.info("bla: #{@object.name}")
Debug an object on the page
A useful way to check what an object contains is to output it in your view. Just use the following line:debug @object
This will show every method available to the object wrapped in a <pre> tag.Tail the log
Tailing the log file means that when you load the page, the console will output detailed information on every line of code that is run, including all SQL queries exactly how they are executed.For linux/mac just open up your console, navigate to the log folder and use the following line:
tail -f development.log
Using Ruby irb
irb is a Ruby module that lets you enter Ruby programs interactively and see the results immediately.It's great for testing code in an environment independant of your application. To use it, type the following at the command line:
script/console
You can then run any ruby you like.Using breakpoint
Arguably one of the most under-used features in Rails and it has to be one of the best debugging tools. Using breakpoint gives you an irb prompt at the exact point in your code where you placed the breakpoint.Simply place the word
breakpoint
in your code before the error. Now open the console and type:script/breakpointer
Refresh your page with the error and in the console, after a few seconds, the prompt will be available.Essentially you can now test your code, exactly as it is in your file. For more detailed instructions check the Rails wiki article on breakpoint
Debugging in production mode
Rails will show a 500 error page to your users when there is an application error. No application internals will be revealed and I it's probably a good idea to style this page to be as 'friendly' as possible.However, this makes it somewhat trickier to debug issues in production mode. Which brings me onto Exception Notifier...
Exception notifications
One of the best debugging tools I have come across is the Exception notficiation plugin. Whenever a user manages to come across an aplication error you will receive an email with full details of that error. The level of detail is more than enough to help you decipher what may have happened. Install the plugin using:ruby script/plugin install exception_notification
Check out the exception notifier read me
for details on how to tell the plugin your IP so that you can also get
the error printed to the screen and not in an email. This ensures you
get error messages, while your users get custom, error friendly, pages.