我在Rackspace VPS上运行了一个rails应用程序。堆栈是rails3 + unicorn + nginx + mysql。
有一个主域使用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配置才能使其正常工作?
答案 0 :(得分:1)
解决此问题的一种简单方法是在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指向这两个域,你就可以了。
如果您想让它在Another::Engine
下工作,您甚至可以挂载coredomain.com/digital
两次:
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