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

How to set up two domains to point at the same app with Passenger but with different Rails functionality?

我在 Apache 上有两个域:domain1.tld & domain2.tld

目前我 domain1.tld 与 Passenger 完美配合,但我还需要 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

Apache 配置 domain2.tld 需要什么?

您的设置在某些时候也可能会演变成拥有两个完全独立的应用程序。我会让您更好地判断何时需要,何时不需要。话虽如此,您可以使用 Rails 中的路由约束来实现您的要求。例如:(请注意,这不是实现此目的的唯一方法,而是我的首选方法)

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 主机,请添加另一个虚拟主机并指向与主应用程序相同的 public 文件夹。所以在这种情况下,需要创建与第一个配置文件中相同的所有信息,但只需添加 domain2.tld 作为新虚拟主机的名称。