Rails 域约束(服务于多个域)
Rails Domain Constraints ( to serve multiple domains )
$ rails -v Rails 4.2.1
$ ruby -v ruby 2.2.2p95 (2015-04-13 revision > 50295) [x86_64-linux]
我正在为一个移动应用构建一个 API,它将有一个管理界面。我正在尝试做的是 运行 通过 nginx 使用独角兽(我在我的开发环境中有 运行ning)
我有 2 个域路由到完全相同的 rails 项目。这些域是: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
请记住,根现在只是不同的页面,但最终将是完全不同的系统。
不太确定从这里到哪里才能实现我希望的功能。
在 irc
#RubyOnRails
的伟大人物的帮助下,我弄明白了。因此,感谢 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
You can also constrain a route based on any method on the Request
object that returns a 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
$ rails -v Rails 4.2.1
$ ruby -v ruby 2.2.2p95 (2015-04-13 revision > 50295) [x86_64-linux]
我正在为一个移动应用构建一个 API,它将有一个管理界面。我正在尝试做的是 运行 通过 nginx 使用独角兽(我在我的开发环境中有 运行ning)
我有 2 个域路由到完全相同的 rails 项目。这些域是: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
请记住,根现在只是不同的页面,但最终将是完全不同的系统。
不太确定从这里到哪里才能实现我希望的功能。
在 irc
#RubyOnRails
的伟大人物的帮助下,我弄明白了。因此,感谢 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
You can also constrain a route based on any method on the
Request
object that returns aString
. 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