如何设置两个域以与 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
作为新虚拟主机的名称。
我在 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
作为新虚拟主机的名称。