我最近的任务是将我现有的 Rails 3 应用程序分离为标准和高级版本。高级版将具有所有现有功能,并添加新布局和新功能。理想情况下,我希望高级用户通过在当前 url 前加上一个子域来访问这个站点,例如“premium.somesite.com”/ 我不想更改的网站的标准版本,仍然可以通过默认 url 访问.
如果可能的话,我想简单地向退出视图和控制器添加一些逻辑,以确定如何处理请求是否正在使用子域。
我尝试关注rails 3 中的 Railcast子域,但是他在博客模型和数据库属性的上下文中使用子域,我希望我的子域在应用程序范围内。这甚至可能与子域?我该如何开始?
我试过的:
在乘客使用的我的 apache httpd.conf 文件中添加了一个额外的 VirtualHost:
<VirtualHost *:80>
ServerName premium.mydomain.com
DocumentRoot /somewhere/../myapp
<Directory /somewhere/public>
Allow from all
Options -Multiviews
</Directory>
</VirtualHost>
将以下内容添加到我的 routes.rb
class PremiumSubdomain
def self.matches?(request)
request.subdomain == "premium"
end
end
MyApp::Application.routes.draw do
constraints(PremiumSubdomain) do
#all of my routes...
end
end
发生什么了:
尝试使用高级子域导航到我的站点会导致找不到域,将约束添加到我的 route.rb 会阻止应用程序的其余部分在我的默认 url 上呈现任何内容。