Best practices for exception hierarchies?

What are best-practices for exception hierarchies?

Should my exceptions derive from Exception, or StandardError, or
RuntimeError?

Should my exceptions be called FooException or FooError? Does Ruby
give a specific meaning to the difference between an “Error” and an
“Exception?”

Josh