Отображение нескольких доменных имен в разные ресурсы в приложении Rails - PullRequest
2 голосов
/ 18 октября 2010

Приложение rails, которое я имею, позволяет пользователям управлять домами отдыха. Каждое свойство имеет свой "сайт / домашняя страница" в моем приложении, и пользователь может настроить контент, он работает хорошо, вполне доволен до сих пор. Типичные рельсы подходят к ресурсам, поэтому URL-адреса определенного свойства выглядят так, как для «домашней страницы» определенного свойства.

localhost:3000/properties/1/

тогда

localhost:3000/properties/1/full_details
localhost:3000/properties/1/price_list

и т.д.

Требуется сопоставить доменное имя, например, www.chalet-yeti.com и разрешить (переписать?) на localhost: 3000 / properties / 1 /

вроде тоже так ...

www.chalet-yeti.com/full_details  -> localhost:3000/properties/1/full_details

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

www.apartment-marie.com  -> localhost:3000/properties/2/

Это возможно / желательно / выполнимо в одном приложении rails? До сих пор решения варьировались от «зачем вам это делать» до вариантов «использования mod_proxy / mod_rewrite / virtual_host config». В случае, если это имеет значение, приложение работает под управлением apache и passenger на моем сервере.

Я не хочу упреждать ответ, но большинство людей до сих пор, похоже, указывают на конфигурацию apache, и большинство говорит, что то, что я пытаюсь сделать, не является невозможным / нежелательным. Очень надеюсь, что кто-нибудь хотя бы укажет мне правильное направление, так как я все утро царапал голову. Вне моей зоны комфорта, и я надеюсь, что смогу запустить свое приложение и не потратил шесть недель на то, чтобы построить белого слона! Если я не могу сделать этот URL-адрес, он мертв!

Ответы [ 2 ]

1 голос
/ 18 октября 2010

http://37signals.com/svn/posts/1512-how-to-do-basecamp-style-subdomains-in-rails

Это то, что вы хотите. Не связывайтесь с Apache за это. Он не масштабируется до сотен доменов и подвержен поломкам.

0 голосов
/ 18 октября 2010

В Rails вы должны думать о запросах, поступающих только на URI, без раздела имени хоста.То есть вместо localhost:3000/properties/1/full_details нужно думать о /properties/1/full_details.Часть localhost:3000 предназначена только для того, чтобы получить запрос к Mongrel во время процесса разработки.

Итак, что вы действительно хотите - это принять запрос так, как он получен HTTPd (Apache, в вашем случае), и извлечьнекоторая информация для построения запроса, который передается Rails.

mod_rewrite, который является модулем Apache, является разумным способом сделать это.

Вы должны убедиться, что один и тот же виртуальныйХост, на котором запущено ваше Rails-приложение, принимает запросы на все имена доменов, которые вы используете.

Затем вы можете использовать mod_rewrite, чтобы сделать что-то вроде этого:

RewriteCond %{HTTP_HOST} ^(www.)?chalet-yeti\.com$
RewriteRule ^(.*)$ /properties/1/$1 [L]

Это займет каждыйзапросите к хосту chalet-yeti.com (или www.chalet-yeti.com) и передайте их Rails как "/ properties / 1 / $ 1" (где $ 1 - это любой дополнительный путь, такой как full_details).

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

...