복붙노트

[RUBY-ON-RAILS] 하나의 응용 프로그램에 여러 도메인을 처리하기 위해 라우팅 난간

RUBY-ON-RAILS

하나의 응용 프로그램에 여러 도메인을 처리하기 위해 라우팅 난간

여기와 다른 몇 가지 유사한 질문에도 불구하고,이 문제에 대한 가능한 해결책을 찾을 수있었습니다. 이 질문에 레일 3 응답되지 않았 음이 간다, 그래서 여기에 보인다 :

나는 현재 사용자가 응용 프로그램의 자신의 인스턴스를 포함하는 자신의 하위 도메인을 만들 수있는 응용 프로그램이 있습니다. http://railscasts.com/episodes/221-subdomains-in-rails-3 - 레일 2에서 가장 버전 3에서, 하위 도메인-FU 보석을 사용하여 제공하고있는 동안 그것은 Railscast에 따라 극적으로 간단합니다.

그건 좋은 물건,하지만 나는 또한 사용자가 자신의 계정에 자신의 도메인 이름을 연결할 수있는 옵션을 제공합니다. 그들이 http://userx.mydomain.com가있을 수 있습니다 동안 그래서, http://userx.com가 아니라 관련이 선택하도록하고 싶습니다.

나는 레일 2에서이 일에 몇 참조를 찾았지만, 그 기술은 (더 이상 작업에 특히이 하나가 표시되지 않습니다 : https://feefighters.com/blog/hosting-multiple-domains-from-a-single-rails -앱/).

아무도 내가 해당 내용을 표시 할 수 있도록 임의의 도메인을 받아 컨트롤러에 따라 그것을 전달하는 경로를 사용하는 방법을 추천 할 수 있습니까?

업데이트 : 레오 니드의 적시 응답, 지금은 덕분에 대답의 대부분을받은, 그리고 코드에 신선 해 보이는했습니다. 궁극적 I합니다 (Railscast 용액으로부터)을 사용하고 routes.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

자, 내가 도메인을 확인하기 위해 연과 함께 기존의 하위 도메인 코드 (다시, 그것은 작동하고 벌금을) 앞에 추가하고있다. 해당 도메인이 서버가 응답하고 주요 사이트가 지정된 컨트롤러에 전달, 작동하는 아래 하나되어 있지 않은 경우.

이 나타납니다이 작동하는 동안, 나는 아직은 일하는 모든 일이없는,하지만 난이 특정 문제가 해결되었다고 생각.

해결법

  1. ==============================

    1.그것은 http://guides.rubyonrails.org/routing.html#advanced-constraints에 따라, 레일 3 실제로 간단합니다 :

    그것은 http://guides.rubyonrails.org/routing.html#advanced-constraints에 따라, 레일 3 실제로 간단합니다 :

    1) LIB / domain_constraint.rb에서 사용자 지정 제약 클래스를 정의 :

    class DomainConstraint
      def initialize(domain)
        @domains = [domain].flatten
      end
    
      def matches?(request)
        @domains.include? request.domain
      end
    end
    

    2) 새로운 블록 구문을 사용하여 경로에있는 클래스를 사용

    constraints DomainConstraint.new('mydomain.com') do
      root :to => 'mydomain#index'
    end
    
    root :to => 'main#index'
    

    또는 구식 옵션 구문

    root :to => 'mydomain#index', :constraints => DomainConstraint.new('mydomain.com')
    
  2. ==============================

    2.레일 5에서, 당신은 단순히이 당신의 경로에서 할 수 있습니다 :

    레일 5에서, 당신은 단순히이 당신의 경로에서 할 수 있습니다 :

    constraints subdomain: 'blogs' do
      match '/' => 'blogs#show'
    end
    
  3. from https://stackoverflow.com/questions/4207657/rails-routing-to-handle-multiple-domains-on-single-application by cc-by-sa and MIT license