2015-04-29 4 views
2

$ рельсы -v Rails 4.2.1Ограничения Рельсы домена (обслуживать несколько доменов)

$ рубинового -v рубинового 2.2.2p95 (2015-04-13 редакция> 50295) [x86_64-Линукс]

Я создаю API для мобильного приложения, которое будет иметь интерфейс администратора. То, что я пытаюсь сделать, запускается через nginx с использованием единорога (который у меня работает в среде моего dev)

У меня есть 2 домена, перенаправленные на тот же самый проект рельсов. Эти домены: api.project.dev и admin.api.project.dev

Я прочитал это: http://guides.rubyonrails.org/routing.html#advanced-constraints

и попробовал: Separate Domain for Namespaced Routes in Rails 4 (см ответ)

Я попробовал несколько других вещей, чтобы попытаться получить эту работа, единственное, что приходит (или для суб-домен) является:

Invalid route name, already in use: 'root'

Моя текущая реализация этого:

class DomainConstraint 
    def initialize(domain) 
    @domains = domain 
    end 

    def matches?(request) 
    @domains.include? request.domain 
    end 
end 

и

require 'domain_constraint' 
Rails.application.routes.draw do 
    resources :statuses 
    constraints (DomainConstraint.new('api.project.dev')) do 
    root :to => 'statuses#index' 
    end 

    constraints(DomainConstraint.new('admin.api.project.dev')) do 
    root :to => 'statuses#new' 
    end 
end 

иметь в виду, что корни разные страницы только на данный момент, но в конечном счете, будет совершенно разные системы.

Не совсем уверен, куда идти отсюда, чтобы получить это функционирование, как я надеюсь.

ответ

2

С прекрасной помощью великих людей в #RubyOnRails на irc Я понял это. Поэтому спасибо crankharder и sevenseacat за ваш вклад и советы.

То, что я закончил с этим было:

class DomainConstraint 
    def initialize(domain) 
    @domains = domain 
    end 

    def matches?(request) 
    @domains.include? request.host 
    end 
end 

и:

require 'domain_constraint' 
Rails.application.routes.draw do 

    constraints DomainConstraint.new('api.project.dev') do 
    resources :statuses 
    root :to => 'statuses#index', as: 'api_root' 
    end 

    constraints DomainConstraint.new('admin.api.project.dev') do 
    resources :statuses 
    root :to => 'statuses#new' 
    end 
end 
0

Вы также можете ограничить маршрут на основе любого метода на Request объекта, возвращающего String. http://guides.rubyonrails.org/routing.html#request-based-constraints

methods available to Request включают host, который может быть использован следующим образом:

constraints host: 'api.project.dev' do 
    resources :statuses 
    root to: 'statuses#index', as: 'api_root' 
    end 

    constraints host: 'admin.api.project.dev' do 
    resources :statuses 
    root to: 'statuses#new' 
    end