2012-06-20 42 views
1

我想弄清楚部署我的RAILS应用程序(rails 3.2,apache,passenger)的方法。该应用程序有两种不同的沟通方式。同一个导轨应用程序的多个端口

  1. 用户连接到我们的https网站,就像通常的rails应用程序一样。这是由一个标准的商业CA签署的。
  2. 自动机器连接到我们的网站,并使用客户端证书认证和检索数据。这全部由我们自己的CA和证书管理。

目前我不考虑平衡,应用程序将运行在一台机器上。 我无法在443上使用可选证书检查来组合这两种方法,因为这会影响在同一个apache实例上运行的其他应用程序,所以我相信我需要两个独立的应用程序端口。

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

有没有更好的方法来区分连接端口比检查客户端证书,如果是这样假设自动连接?

我对这两种黑客都很感兴趣,希望它能够快速工作以及像这样构建正确的导轨方式。在其他控制器

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

然后:

感谢

+0

难道你不能只使用不同的域,然后使用虚拟主机将它们分开吗? –

+0

不同的域与使用单独虚拟主机的不同端口使用同一个域几乎是一样的。问题不在于如何设置端口,而是如何设置乘客和导轨,以便为相同的底层应用程序使用不同的端口。 – jumentous

+0

嗡嗡声,有趣的是,由于乘客通过虚拟主机与一个应用程序合作,我不确定这是否可行。你可以移动到不同的Web服务器设置,如乘客 - >独角兽(或者甚至是nginx - >独角兽)? –

回答

0

在你的Rails应用程序,如果你正在寻找有行为请求类型有条件,你可以加少许的辅助方法是这样:

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

太好了,我以为会有访问请求中某处的端口。虽然没有被接受,但我仍然在寻找人来回答更大的设置问题。 – jumentous

相关问题