如何设置两个域指向与Passenger相同的应用程序,但具有不同的Rails功能?

问题描述:

我有两个域上的Apache:domain1.tld & domain2.tld如何设置两个域指向与Passenger相同的应用程序,但具有不同的Rails功能?

目前我有domain1.tld与客运工作完美,但我也需要domain2.tld指向此相同的应用程序,但是当到达这第二个领域,这将有不同的功能(即,呼叫不同的控制器并且具有一些不同的路线)比当用户击中domain1.tld时。

你如何在Rails中配置这个传统?

至于Apache的配置得好,我已在为domain1.tld如下:

DocumentRoot /home/username/apps/domain1.tld/production/current/public 
<Directory /home/username/apps/domain1.tld/production/current/public> 
    AllowOverride all 
    Options -MultiViews 
    Require all granted 
</Directory> 

ErrorLog /home/username/logs/domain1.tld.error.log 
CustomLog /home/username/logs/domain1.tld.access.log combined 

将需要domain2.tld为Apache的配置是什么?

您的设置在某个时候也可能演变为拥有两个完全独立的应用程序。我会让你成为何时何地不需要的更好的评判。话虽如此,你可以实现你在Rails中使用Routing Constraints所要求的。对于例如:(请注意,这不是实现这一目标的唯一途径,但我的首选方式)

root to: 'home#index1', as: :domain1, constraints: {|req| req.host == 'domain1.tld' } 
root to: 'home#index2', as: :domain2, constraints: {|req| req.host == 'domain2.tld'} 
root to: 'home#index' 

要添加一个新的Apache主机,一个增加了一个虚拟主机,并指向相同的公共文件夹中主要应用。因此,在这种情况下,创建与第一个配置文件中相同的所有信息,只需添加domain2.tld作为新的虚拟主机名即可。

+1

欣赏答案。既然你可能错过了关于'httpd' config的部分,我已经在上面澄清了我的问题,并在我的当前配置中详细说明了一些问题,并直接标注了问题的其他部分。 – ylluminate 2015-03-03 21:37:00

+0

我不确定您是否可以在Apache级别上实现此目标。因为调用适当的控制器动作的责任属于Rails栈而不是Apache。 – 2015-03-03 21:46:32

+0

这是一个双重问题。对于你在rails配置上的建议你是正确的,但是Apache同样需要注意'domain2.tld'。 – ylluminate 2015-03-03 21:48:36