The raise and fail of exceptions

In Ruby there are a lot method aliases or synonyms doing the exactly same job. That is not by accident or arbitrary choice. That is an intended concept for writing expressive code.
It is the same with the Kernel#raise and its twin Kernel#fail.
Most Ruby developer use Kernel#raise for raising exceptions. However only a few use Kernel#fail for the same goal, but in a different context. They miss the chance to improve the expressive power of their code.
Jim Weirich prolly was the first, who used Kernel#raise and Kernel#fail for different purposes.
Following that pattern is a stylistic decision and is consistent with the Ruby styleguide.

Fail exception

Use Kernel#fail for raising exceptions, when code fails in a true sense (means an unexpected behaviour that breaks the processing):

class Account
  def register(name)
    fail ArgumentError, "The assigned parameter is not a name." unless name.is_a? String
    "Hello #{name}!"
  end
end

Raise exception

Use Kernel#raise for raising exceptions, when you catch the exception afterwards, like the Ruby on Rails implementation:

module ActiveRecord
  class Persistence
    def save!(*)
      create_or_update || raise(RecordNotSaved.new("Failed to save the record", self))
    end
  end
end

The intention behind is to use Kernel#raise when the code does not fail, but explicitly raises an exception. In practice the mentioned scenario is rarely the case. Therefore indicating a failure by Kernel#fail is the Rubyists natural friend.
Speaking of exception:
Do not use exceptions for flow control!
There one better go with throw / catch.