Rails + Heroku + Cloudflare - исключить www как субдомен

У меня есть мультитенантное приложение Rails 4, которое использует поддомены со схемами PostgreSQL для «арендатора» приложения. У меня есть поддомен «*», настроенный в Heroku и Cloudflare, и сайт загружается, но он продолжает «думать», что www является допустимым поддоменом. Из-за этого обычно действующие ссылки (которые работают в разработке) не работают в производственной среде, потому что www.mysite.com/accounts/new и т. Д. Совпадает с asdf.mysite.com/accounts/new. Есть ли способ заставить мое приложение в значительной степени игнорировать www как поддомен? Я бы по-прежнему хотел, чтобы mysite.com перенаправлял на www.mysite.com, но в значительной степени просто установил для субдомена значение false, когда это www?

Чтобы сделать вещи более конкретными, в моем application_controller есть код, который выполняет следующие действия. Обратите внимание на комментарии. В режиме разработки redirect_to root_url (subdomain: false) работает, но в производстве он просто бесконечно перенаправляет и не загружается. Чтобы заставить его загрузиться, я просто визуализирую страницу, но при этом никогда не устанавливает для субдомена значение false.

  def load_schema
    Apartment::Tenant.switch!('public')
    return unless request.subdomain.present?
    if current_account
      Apartment::Tenant.switch!(current_account.subdomain)
    else
      redirect_to root_url(subdomain: false) # Works locally, but infinite re-direct in production
      #render 'welcome/index' # - Renders the page in production, but nothing else works.
    end
  end

По сути, в режиме разработки все работает так, как ожидалось, но в производственной среде, похоже, есть некоторые проблемы с DNS, которые необходимо устранить, но я не могу понять, что делать. Есть предположения?


person Trinculo    schedule 09.06.2015    source источник


Ответы (2)


Мне пришлось удалить запись имени A в CloudFlare и заменить ее записью CNAME. Я также добавил две дополнительные записи CNAME: одну подстановочный знак и одну для www.

person Trinculo    schedule 16.06.2015

Я предлагаю заставить www.mysite.com перенаправлять на mysite.com, где у вас, вероятно, есть главный сайт.

Вы можете выполнить это, указав имя хоста на службу перенаправления, или используя определенный маршрут с ограничением в файле routes.rb.

person Simone Carletti    schedule 09.06.2015
comment
В настоящее время в CloudFlare настроены 3 записи DNS: A - mydomain.com - указывает на [IP-адрес] CNAME - www - псевдоним myapp.herokuapp.com CNAME - * - псевдоним myapp.herokuapp.com, который я пытался удалить www, и это делает то же самое (я думаю, что это подстановочный знак?) Есть идеи по его настройке? Это правильно? Или пример routes.rb с ограничением был бы потрясающим. Спасибо за ваш ответ! - person Trinculo; 10.06.2015