For those of you who are looking to also force SSL using heroku, this worked well for me, based on Heroku SSL on root domain
In my DNS settings I set up a URL / Forward record (DNS Simple)
URL foo.com 3600 http://www.foo.com
The CNAME setup only needs to be setup for WWW
CNAME www.foo.com 3600 providedssslendpoint.herokussl.com
I also had to setup and Alias for my root
ALIAS foo.com 3600 providedsslendpoint.herokussl.com
Then I decided to simply replace foo.com with an env variable ENV['SITE_HOST']
(where SITE_HOST might equal www.foo.com or test.foo.com) so I can have control via my heroku configuration. That way, I can control what happens in different environments. (for setting up env variables locally see https://github.com/bkeepers/dotenv)
For example, my test app uses test.foo.com as the url it also has its own SSL endpoint so that works fine for me.
before_filter :check_domain
def check_domain
if Rails.env.production? || Rails.env.testing? and request.host.downcase != ENV['SITE_HOST']
redirect_to request.protocol + ENV['SITE_HOST'] + request.fullpath, :status => 301
end
end
From now on, end users will always access www with forced SSL. Old links will suffer a small hang but nothing noticeable.