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

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

До сих пор это - то, как мне настраивали вещи. Я использую субдомен-fu для включения маршрутизации:

# routes.rb
map.with_options :conditions => {:subdomain => true} do |app|
  app.resources # User's application routes are all mapped here
end

map.with_options :conditions => {:subdomain => false} do |www|
  www.resources # Public-facing sales website routes are mapped here
end

В дополнение к этому я использую метод, описанный здесь для получения получаемой доступ учетной записи через субдомен или полный домен:

before_filter :set_current_account

def set_current_account
  if request.host.ends_with? current_domain
    # via subdomain
    @current_club = Club.find_by_subdomain(current_subdomain)
  else
    # via full domain
    @current_club = Club.find_by_mapped_domain(request.host)
  end
end

У меня еще нет очень далеко вниз процесса создания этого, но уже я вижу, что собираюсь столкнуться с проблемами с маршрутизацией. Если request.host является некоторый домен random.com затем субдоменом-fu, не собирается направлять соответствующие маршруты?

Я предполагаю, что это не то, что необычный проблема, таким образом, кто-либо может совместно использовать, как они занялись этой проблемой, или как я настроил бы свои маршруты, чтобы сделать то, к чему я нуждаюсь в ней?

5
задан John Topley 15 January 2010 в 16:48
поделиться

2 ответа

Используйте дискретное равномерное распределение из случайного модуля по достаточному количеству значений, затем разделите его:

Например, в случае 701 используйте распределение по 10 значениям, для 2 значений возвращаем 1, для других 3 возвращаем 2, а для других 5 возвращаем 3.

Вы можете построить любое распределение, используя достаточно однородных распределений:)

-121--1858946-

с помощью String.format («% s% s», this.getField1 (), this.getField2 ()); будет лучшим способом для этого, поскольку методы .getXXX () могут иметь логику, которая вам нужна Это самый безопасный способ сделать это, на случай, если кто-то придет и добавит логику в метод .getXXX () , и они не думают обновлять .toString () .

-121--4167151-

Я столкнулся с этой проблемой, пытаясь сделать слишком много в одном приложении. Вы начнете делать условия в очень странных местах, которые вам не нужно. Я решил иметь 2 отдельных приложений Rails, которые имеют подстановочный домен, точку приложению Пользователя, а затем иметь www.domain.com и domain.com точек на стороне, обращенной к публике. Я знаю, что это не совсем «отвечает» на ваш вопрос напрямую.

Небольшой кодовый запах там, что я могу помочь вам исправить, если добавить это в верхней части этого метода:

return @current_club if defined?(@current_club)

Он не будет делать запрос для каждый раз, когда вы пытаетесь получить доступ @ current _ club , он вернет результат, который вы уже вернули.

2
ответ дан 14 December 2019 в 19:13
поделиться

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

class AccountDetector
  def initialize(app)
    @app = app
  end

  def call(env)
    account = Club.find_by_mapped_domain(env["HTTP_HOST"])
    if account
      env["HTTP_HOST"] = "#{account.subdomain}.yourdomain.com"
    end

    @app.call(env)
  end
end

Затем добавьте это в enducial.rb :

config.middleware.use AccountDetector
3
ответ дан 14 December 2019 в 19:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: