Rails下用于软件即服务的Apache RequestHeaders

时间:2010-01-22 16:08:34

标签: ruby-on-rails apache saas

单个应用程序下的应用程序的多个客户实例。

我需要通过传递不同的URL来允许多个用户连接到我的Apache Web服务器: customer1.myhost.com company1.myhost.com company2.myhost.com 等

我希望我的Apache服务器执行的操作是传递未定向到某个现有主机列表的所有请求 (比如trac.myhost.com和https://myhost.com)到我的Rails应用程序,通过设置RequestHeader来识别所请求的主机,如:

RequestHeader“INSTANCE_NAME”= customer1 #for customer1.myhost.com

感谢您的帮助!

Ps。:最终目标是提供软件切片作为服务,但让所有这些客户在1个应用程序下运行。每个客户不是1个应用程序。

1 个答案:

答案 0 :(得分:2)

使用标准的VirtualHost配置,您可以执行以下操作:

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName app.example.com
  ServerAlias *.example.com

  DocumentRoot /web/app.example.com/public
</VirtualHost>

这将捕获所有尚未被其他VirtualHost条目捕获的请求。

当您的应用程序收到请求时,您将使用提供的主机名设置请求变量。这适用于任何ActionController:

request.host

从那里你可以在某种before_filter中加载适当的数据,通常如下所示:

before_filter :load_client

def load_client
  @client = Client.find_by_hostname!(request.host)
rescue ActiveRecord::RecordNotFound
  render(:partial => 'client_not_found', :status => :not_found)
end

只要客户端正确填充了主机名,就会在每次加载页面时找到它们。