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