多租户在轨道上使用自定义域

时间:2011-07-25 20:12:46

标签: ruby-on-rails apache multi-tenant

我正在创建一个像shopify这样的多租户应用程序,并且想知道如何在服务器上创建指向同一应用程序实例的自定义域? 例如:

app1.mysystem.com == www.mystore.com
app2.mystem.com == www.killerstore.com

我需要在像Google Apps这样的CNAME上进行配置吗?如果是这样,我该怎么做?是否有一些好文章展示了它的工作原理?

PS:app1和app2指向同一个应用程序! 感谢

2 个答案:

答案 0 :(得分:6)

我有类似的设置,我正在使用nginX。我为了便于维护而做的是接受了来自nginx的所有连接并在我的应用程序中进行了过滤。

# application_controller.rb
before_filter :current_client

private
def current_client
  # I am using MongoDB with Mongoid, so change the syntax of query accordingly
  @current_client ||= Client.where(:host => request.host).first
  render('/public/404.html', :status => :not_found, :layout => false) unless @current_client
end

您可以让您的客户拥有域/子域指向you_ipyour_domain_pointing_to_your_ip.com的域记录,并在表单中捕获并保存在数据库中。然后在current_client中更改查询,如:

@current_client ||= Client.or(:host => request.host).or(:alias => request.host).first

答案 1 :(得分:0)

我目前正在研究类似的东西,只是做了Nginx配置。这就是我做的方式。

server {
  listen 80;
  server_name domain1.com domain2.com domain3.com;
  rails_env production;
  passenger_enabled on;
  root /var/www/your_site_folder/current/public;
}

如果您正在使用乘客,请确保运行passenger_pre_start。

例如:passenger_pre_start http://your_domain.com;

为您添加到上述配置块中的每个域添加一行。

此处的密钥位于server_name下。通常情况下,我会使用www.domain.com或没有'www',domain.com将其用于域名。但在这种情况下,您可以从此处指向您想要点击应用的所有域名,并且您可以使用Nginx进行多租户设置。