我有一个Rails应用程序,它具有与Tumblr类似的设置,也就是说,您可以拥有: (1)子域名托管(your-username.myapp.com) (2)域名托管(your-username.com)
两者都会转发到使用我的应用程序创建的该用户的个性化网站。
如何在Rails中实现这一目标?我已经能够(1)使用subdomain-fu,但我不确定如何让(2)工作。任何指针(插件,宝石,教程)等都会非常有用,我似乎无法找到任何指针。
谢谢!
答案 0 :(得分:3)
域的原则与子域相同 - 找到域,映射到帐户。
详细信息取决于您的托管如何处理DNS。
我目前正在使用Heroku及其通配符服务。 在这种情况下,域名使用cname映射到我的Heroku应用程序托管的子域。从这里我可以找出相关的帐户和详细信息。
答案 1 :(得分:2)
编辑:我发现了一种更简单的方法:http://www.arctickiwi.com/blog/7-host-and-domain-based-routing-in-ruby-on-rails
不完全是答案,但这是我能给予的最好的答案。也许这对你也有帮助。
理想情况下,this blog post from transfs.com和subdomain-fu应该可以解决问题。然而,我一直在努力实现它,但它们似乎并没有很好地协同发挥。
基本上,如果我不包含intiializer,子域路由可以正常工作。如果我包含初始化程序,则子域路由会中断(map.root会捕获所有内容)。我有一种感觉,就是它在初始化器中构建条件字符串的方式。如果你能弄清楚它是如何破坏的,那么你将拥有一个有用的应用程序。
我的初始化程序:
module ActionController
module Routing
class RouteSet
def extract_request_environment(request)
env = { :method => request.method }
env[:domain] = request.domain if request.domain
env[:host] = request.host if request.host
env
end
end
class Route
alias_method :old_recognition_conditions, :recognition_conditions
def recognition_conditions
result = old_recognition_conditions
[:host, :domain].each do |key|
if conditions[key]
operator = "==="
if conditions[key].is_a?(Regexp)
operator = "=~"
end
result << "conditions[:#{key.to_s}] #{operator} env[:#{key.to_s}]"
end
end
result
end
end# end class Route
end
end
我的路线(仅用于开发)。你会看到我的本地开发域名stiltify.dev。对不起,我试着让它看起来不错,但是我无法让代码块看起来不错。我把它放在贴身上:http://pastie.org/940619。
Ryan Bates' screencast中的评论部分非常有帮助,让我弄清楚子域名=&gt;他们遇到的错误和其他错误。仍然没有解决问题!