Rails域约束(为多个域提供服务)

时间:2015-04-29 02:48:17

标签: ruby-on-rails-4 nginx

  

$ rails -v Rails 4.2.1

     

$ ruby​​ -v ruby​​ 2.2.2p95(2015-04-13 revision> 50295)[x86_64-linux]

我正在为移动应用构建一个API,它将拥有一个管理界面。我试图做的是使用unicorn(我在我的开发环境中运行)通过nginx运行它。

我有2个域路由到完全相同的rails项目。这些域名为:api.project.devadmin.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 个答案:

答案 0 :(得分:3)

#RubyOnRails irc crankharder的善良帮助下,我明白这一点。所以,感谢sevenseacatclass 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

{{1}}

答案 1 :(得分:0)

  

您还可以根据返回Request的{​​{1}}对象上的任何方法约束路径。 http://guides.rubyonrails.org/routing.html#request-based-constraints

methods available to Request包含String,可按以下方式使用:

host