Несколько доменов, указывающих на одно приложение Heroku Rails через серверы имен, отображающие различный контент?

У нас есть приложение 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 -поперечник/. Возможно ли, чтобы они просто изменили свои серверы имен, чтобы указать на нас, и мы обрабатываем маршрутизацию? Я боюсь, что это был бы прерыватель транзакций, если бы пользователь должен был выполнять какую-либо настройку DNS, не изменяя их серверов имен.

Спасибо!

Ответы

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

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

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

Ну, как-то вы уже дифференцировали 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