Поддержка нескольких доменов / поддоменов в Rails - PullRequest
2 голосов
/ 22 февраля 2010

У меня есть приложение Rails, которое настроено аналогично Tumblr, то есть вы можете иметь: (1) Хостинг поддоменов (your-username.myapp.com) (2) Доменный хостинг (your-username.com)

Оба перенаправят на персональный веб-сайт для этого пользователя, созданный с помощью моего приложения.

Как я могу сделать это в Rails? Мне удалось заставить (1) работать с поддоменом-фу, но я не уверен, как заставить работать (2). Любые указатели (плагины, гемы, учебники) и т. Д. Были бы очень полезны, я не могу найти их.

Спасибо!

Ответы [ 2 ]

3 голосов
/ 22 февраля 2010

Принцип для доменов аналогичен субдомену - найдите домен, сопоставьте с учетной записью.

Детали будут зависеть от того, как ваш хостинг будет обрабатывать DNS.

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

2 голосов
/ 30 апреля 2010

РЕДАКТИРОВАТЬ: я нашел гораздо более простой способ: http://www.arctickiwi.com/blog/7-host-and-domain-based-routing-in-ruby-on-rails

Не совсем ответ, но это лучшее, что я могу дать. Может быть, это вам тоже поможет.

В идеале, это сообщение в блоге от transfs.com и subdomain-fu должно сработать. Однако я пытался реализовать это, и они, похоже, не очень хорошо играют вместе.

Обычно, если я не включаю инициализатор, маршрут субдомена работает нормально. Если я включаю инициализатор, маршрут субдомена ломается (все ловится map.root). У меня такое ощущение, что он строит строку условия в инициализаторе. Если вы сможете понять, как он ломается, у вас будет работающее приложение.

Мой инициализатор:

module ActionController module Routing class RouteSet def extract_request_environment(request) env = { :method => request.method } env[:domain] = request.domain if request.domain env[:host] = request.host if request.host<br> env end end class Route alias_method :old_recognition_conditions, :recognition_conditions def recognition_conditions result = old_recognition_conditions [:host, :domain].each do |key| if conditions[key] operator = "===" if conditions[key].is_a?(Regexp) operator = "=~" end result << "conditions[:#{key.to_s}] #{operator} env[:#{key.to_s}]" end end result end end# end class Route end end

Мои маршруты (только для разработки). Вы увидите мой локальный домен разработки, stiltify.dev. Извините, я попытался сделать так, чтобы это выглядело хорошо здесь, но я не мог заставить блок кода выглядеть красиво. Я вместо этого положил его на пасти: http://pastie.org/940619.

Раздел комментариев в скринкасте Райана Бейтса был очень полезен и заставил меня выяснить поддомен => false и другие ошибки, в которые они попадали. Тем не менее, проблема не устранена!

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