Мені не вдалося знайти дієвого вирішення цієї проблеми, незважаючи на кілька подібних питань тут і деінде. Здається імовірним, що на це запитання не було відповіді для Rails 3, тому тут йдеться:
У мене є програма, яка в даний час дозволяє користувачам створювати власні субдомени, що містять їх екземпляр програми. У той час як у Rails 2 вам найкраще служити із використанням самоцвіту subdomain-fu, у версії 3 це значно простіше, згідно із Railscast - http://railscasts.com/episodes/221-subdomains-in-rails-3 .
Це добре, але я також хочу надати можливість користувачам пов’язувати власне доменне ім’я зі своїм обліковим записом. Тож, хоча вони можуть мати http://userx.mydomain.com , я хотів би, щоб вони також вирішили пов’язати http://userx.com .
Я знайшов кілька посилань на те, як це робити в Rails 2, але ці методи, схоже, вже не працюють (особливо цей: https://feefighters.com/blog/hosting-multiple-domains-from-a-single-rails -app / ).
Хтось може порекомендувати спосіб використання маршрутів для прийняття довільного домену та передачі його контролеру, щоб я міг показати відповідний вміст?
Оновлення : Зараз я отримав більшість відповідей завдяки своєчасній реакції Леоніда та новому погляду на код. Зрештою, це вимагало додавання до існуючого коду субдомену, який я використовував (із рішення Railscast), а потім додавання трохи до маршрутів.rb. Я ще не до кінця, але хочу опублікувати те, що маю на сьогодні.
У lib / subdomain.rb:
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end
class Domain
def self.matches?(request)
request.domain.present? && request.domain != "mydomain.com"
end
end
Я додав другий клас, наслідуючи перший, який, як відомо, працює. Я просто додаю умову, яка гарантує, що вхідний домен не є тим, для якого я розміщую основний сайт.
Цей клас використовується в routes.rb:
require 'subdomain'
constraints(Domain) do
match '/' => 'blogs#show'
end
constraints(Subdomain) do
match '/' => 'blogs#show'
end
Тут я додаю існуючий код субдомену (знову ж таки, він працює нормально) за допомогою строфи, щоб перевірити домен. Якщо цей сервер відповідає на цей домен, і це не той, під яким працює основний сайт, перешліть його на вказаний контролер.
І хоча це, здається, працює, у мене ще не все працює, але я думаю, що ця конкретна проблема була вирішена.