Несколько доменов, указывающих на одно приложение Heroku Rails через серверы имен, отображающие разный контент? - PullRequest
16 голосов
/ 15 июня 2011

У нас есть приложение Rails 3, которое позволяет пользователям создавать профиль и получать к нему доступ с субдомена.Например:

  • user1.app.com
  • user2.app.com
  • user3.app.com

СейчасПредположим, что они хотели указать свое доменное имя в своем профиле, поэтому www.user1.com показывает user1.app.com и www.user1.com / my-content / показывает user1.app.com / my-content / .Могут ли они просто изменить свои серверы имен, чтобы они указывали на нас, и мы обрабатываем маршрутизацию?Я боюсь, что это будет прервать сделку, если пользователь должен будет выполнить любую настройку DNS, кроме простого изменения своих серверов имен.

Спасибо!

Ответы [ 2 ]

15 голосов
/ 16 июня 2011

Это действительно два вопроса. Думаю, я отвечу так.

Как разрешить клиентам добавлять собственный домен в мое приложение на базе heroku?

Итак, в вашем примере их доменное имя www.user1.com

должны произойти две вещи

  1. www.user1.com необходимо добавить в ваши домены heroku для приложения
  2. днс для www.user1.com должен быть установлен на серверах heroku

Чтобы добавить этот новый домен, я думаю, вам нужно сохранить пользовательский домен в приложении, и когда он будет изменен или создан, убедитесь, что задание в очереди настроено, чтобы перенести это изменение конфигурации в heroku.

Чтобы правильно выполнить днс, я надеюсь, что достаточно добавить CNAME для user1.app.com. Поэтому, если у вас есть подстановочный знак CNAME, связывающий днс с Heroku, вы можете избежать простоев, которые могут возникнуть, если Heroku снова получит DOS-версию.

Как я могу показывать контент, основанный на домене, а не только на поддомене?

Ну, как-то вы уже отличаете user1.app.com от user2.app.com

Может быть, вы просто понюхали request.host. Теперь вам просто нужно сначала попробовать пользовательский домен.

Может быть, это сработает.

before_filter :set_client

def set_client
  @client = Client.find_by_custom_domain(request.host) || Client.find_by_subdomain(request.host.split(".").first)
  unless @client
    raise "unrecognised domain #{request.host}"
  end
end
12 голосов
/ 16 июня 2011

Вы должны получить их в первую очередь, чтобы они установили www.user1.com так, чтобы он указывал на proxy.heroku.com (или настройте свою собственную запись cname для proxy.heroku.com и заставьте их называть свои домены так). а затем вам нужно зарегистрировать их пользовательский домен в приложении heroku, чтобы правильное приложение отвечало в Heroku, сохраненном в их учетной записи ?? в вашем приложении, чтобы его можно было сопоставить с входящими запросами.

Этот метод используется в CMS Locomotive Rails, поэтому я бы посоветовал взглянуть на него - он использует приложение Heroku INSIDE , чтобы пользовательские домены могли быть добавлены через администратора сайта, который, в свою очередь, обращается к Heroku API для добавления пользовательского домена в приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...