Используя стандартную конфигурацию VirtualHost, вы можете сделать это:
NameVirtualHost *:80
<VirtualHost *:80>
ServerName app.example.com
ServerAlias *.example.com
DocumentRoot /web/app.example.com/public
</VirtualHost>
Это будет захватывать все запросы, которые еще не были захвачены другими записями VirtualHost.
Когда ваше приложение получит запрос, вам будет задана переменная запроса с указанным именем хоста. Это доступно любому ActionController:
request.host
Оттуда вы можете загрузить соответствующие данные в некоторый вид before_filter, как это обычно делается следующим образом:
before_filter :load_client
def load_client
@client = Client.find_by_hostname!(request.host)
rescue ActiveRecord::RecordNotFound
render(:partial => 'client_not_found', :status => :not_found)
end
До тех пор, пока у клиента правильно заполнено имя хоста, он будет обнаруживаться при каждой загрузке страницы.