SAME rails应用程序的多个端口

时间:2012-06-20 02:21:52

标签: ruby-on-rails apache passenger

我正试图找出部署我的RAILS应用程序的方法(rails 3.2,apache,passenger)。该应用程序有两种不同的通信方式。

  1. 用户连接到我们的https网站,就像通常用于rails应用一样。这是由标准商业CA签署的。
  2. 自动机器连接到我们的站点并使用客户端证书身份验证和检索数据。这全部由我们自己的CA和证书管理。
  3. 目前我不考虑平衡,该应用程序将在一台机器上运行。 我不能在443上使用可选的证书检查来组合这两种方法,因为这会影响在同一个apache实例上运行的其他应用程序,所以我相信我需要两个单独的端口用于该应用程序。

    我应该如何管理这个?是否可以将apache配置为通过单独的vhosts指向同一个应用程序(可能通过代理单独乘客)?我是否应该将我的应用程序分解为两个单独的应用程序与一些共享库或引擎?我应该只部署两次指向同一个数据库(这将如何影响缓存)?

    是否有更好的方法来区分连接端口,而不是检查客户端证书,如果是,则假定自动连接?

    我也对能够快速完成工作的hacks以及构建类似这样的东西的正确轨道方式感兴趣。

    由于

1 个答案:

答案 0 :(得分:0)

在你的rails应用程序中,如果你希望行为以请求类型为条件,你可以像这样添加一个小帮助方法:

class ApplicationController < ActionController::Base
  def api_request?
    request.port == 443
  end
end

然后在你的其他控制器中:

class UserController < ApplicationController 
  def index
    @users = User.all
    if api_request?
      render :json => @users.to_json
    else
      render :action => :index
    end
  end
end