redirecionar para host canônico no Rails 4

Às vezes, você deseja usar um único nome de host para seu aplicativo e tem solicitações de outros nomes de host redirecionadas para o host canônico.

Exemplo:
myfancyapp.herokuapp.com/*deve redirecionar para myfancyapp.com/*`

Você pode usar a gema de middleware de rack como rack-canonical-host ou rack-rewrite .

Você também pode obter o mesmo resultado sem nenhuma gema adicional usando restrições nas rotas do Rails.

no config/routes.rb

if Rails.env.production?
constraints
(:host => /^(?!myfancyapp.com)/i) do
match
"/(*path)" => redirect {
|params, req| "http://myfancyapp.com/#{params[:path]}"
}, via: [:get, :post]
end
end

Se você – como eu – prefere manter suas configurações nas variáveis ​​env, você pode usar algo nesse sentido

if ENV['CANONICAL_HOST']
constraints
(:host => Regexp.new("^(?!#{Regexp.escape(ENV['CANONICAL_HOST'])})")) do
match
"/(*path)" => redirect { |params, req| "http://#{ENV['CANONICAL_HOST']}/#{params[:path]}" }, via: [:get, :post]
end
end