在子域名上安装引擎 Rails 3.1

8

我正在进行一些关于可装载引擎的实验。首先,我需要知道您对这种场景的看法:将应用程序中的“大型模块块”制作为“可装载引擎”,这是一个好主意吗?

我尝试过,它的运行效果非常好。在可装载引擎中,我们可以全局访问应用程序的模型,在应用程序中,我们可以通过模块前缀访问引擎模型。所以它对我来说非常有效。

现在回到原始问题:

我想将引擎挂载到子域上,以便特定子域的每个请求都由该特定引擎提供服务。我使用了这段代码。

root :to=>'dashboard#index'
scope :subdomain => 'admin' do
    mount MyAdmin::Engine => '/'
end

在这种情况下,mydomain.comadmin.mydomain.com 都将跳转到 dashboard controller。如果我更改了偏好设置,则会发生以下变化。
scope :subdomain => 'admin' do
    mount MyAdmin::Engine => '/'
end
root :to=>'dashboard#index'

在这种情况下,mydomain.comadmin.mydomain.com 都指向了 特定引擎的根控制器
我们如何实现这种情况并将引擎挂载到特定的子域名上?
2个回答

13

我通过使用以下路由条目来完成任务:

scope :subdomain => 'www' do
   root :to=>'dashboard#index'
end
scope :subdomain => 'admin' do
    mount MyAdmin::Engine => '/'
end

如果我想要在foo.com和www.foo.com两个网址上都能访问我的域名foo.com怎么办?上述更改使得从foo.com加载内容变得不可能。 - jkndrkn
请参考上面@samuelkobe的答案。 - Nazar Hussain
在:子域中使用正则表达式是不可能的吗? 例如:scope :subdomain => /^$|www/ do ... - Stan Bondi
我认为你可以使用正则表达式来处理子域名,因为我们可以将其用于任何路由约束参数。但是我以前没有测试过它。 - Nazar Hussain

4

我使用Rails 3.2.12和ruby 1.9.3-194,提出了一种不同的解决方案,可以在本地避免www子域问题,同时允许在特定子域名下存在引擎。

get "home/index"

constraints :subdomain => 'store' do
    mount Spree::Core::Engine, :at => '/'
end

root :to => 'home#index'

我可能完全错了,但目前它能够正常工作。


非常有用!通过使用 mount Spree::Core::Engine => '/',可以使挂载指令变得更短。 - Epigene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接