将请求从域发送到特定 Rails 引擎
Send Requests from Domain to Specific Rails Engine
我在 Rackspace VPS 上有一个 rails 应用程序 运行。栈是 rails3 + unicorn + nginx + mysql.
有一个 primary 域使用 proxy_pass
将流量直接发送到 unicorn 套接字。
我开发了一个安装在 /digital
下的新引擎。现在,人们可以通过 http://primarydomain.com/digital.
与该引擎进行交互
我想托管一个将请求直接转发到 /digital
的新域;不是根引擎。
因此,例如,以下请求将产生相同的结果:
http://primarydomain.com/digital/splash
http://alternatedomain.com/splash
在完美的世界中,引擎将是一个单独的应用程序。我想把单独的域当作一个单独的应用程序,尽管它实际上是一个已安装的引擎。
这是 routes.rb
的样子:
Company::Application.routes.draw do
root :to => 'spree/home#splash'
ActiveAdmin.routes(self)
mount Core::Engine, :at => '/'
mount Another::Engine, :at => '/digital'
end
我需要什么 rails + nginx 配置才能让它工作?
解决此问题的一个简单方法是在 Rails 内使用路由约束。事实上,在引擎中包含应用程序的各个部分会使它变得更加简单。
Company::Application.routes.draw do
mount Core::Engine, at: '/', constraints: { domain: 'coredomain.com' }
mount Another::Engine, at: '/', constraints: { domain: 'anotherdomain.com' }
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
end
确保引擎支架在路线中排在第一位,以便它们的路线优先于 ActiveAdmin
添加的任何内容。
现在您只需将两个域都指向带有 nginx 的应用程序即可。
如果你想让它在 coredomain.com/digital
下工作,你甚至可以挂载 Another::Engine
两次:
Company::Application.routes.draw do
constraints domain: 'coredomain.com' do
mount Core::Engine, at: '/'
mount Another::Engine, at: '/digital'
end
constraints domain: 'anotherdomain.com' do
mount Another::Engine, at: '/'
end
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
end
我在 Rackspace VPS 上有一个 rails 应用程序 运行。栈是 rails3 + unicorn + nginx + mysql.
有一个 primary 域使用 proxy_pass
将流量直接发送到 unicorn 套接字。
我开发了一个安装在 /digital
下的新引擎。现在,人们可以通过 http://primarydomain.com/digital.
我想托管一个将请求直接转发到 /digital
的新域;不是根引擎。
因此,例如,以下请求将产生相同的结果:
http://primarydomain.com/digital/splash
http://alternatedomain.com/splash
在完美的世界中,引擎将是一个单独的应用程序。我想把单独的域当作一个单独的应用程序,尽管它实际上是一个已安装的引擎。
这是 routes.rb
的样子:
Company::Application.routes.draw do
root :to => 'spree/home#splash'
ActiveAdmin.routes(self)
mount Core::Engine, :at => '/'
mount Another::Engine, :at => '/digital'
end
我需要什么 rails + nginx 配置才能让它工作?
解决此问题的一个简单方法是在 Rails 内使用路由约束。事实上,在引擎中包含应用程序的各个部分会使它变得更加简单。
Company::Application.routes.draw do
mount Core::Engine, at: '/', constraints: { domain: 'coredomain.com' }
mount Another::Engine, at: '/', constraints: { domain: 'anotherdomain.com' }
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
end
确保引擎支架在路线中排在第一位,以便它们的路线优先于 ActiveAdmin
添加的任何内容。
现在您只需将两个域都指向带有 nginx 的应用程序即可。
如果你想让它在 coredomain.com/digital
下工作,你甚至可以挂载 Another::Engine
两次:
Company::Application.routes.draw do
constraints domain: 'coredomain.com' do
mount Core::Engine, at: '/'
mount Another::Engine, at: '/digital'
end
constraints domain: 'anotherdomain.com' do
mount Another::Engine, at: '/'
end
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)
end