2010-02-22 36 views
2

我有一个类似于Tumblr设置的Rails应用程序,也就是说,您可以有: (1)子域托管(your-username.myapp.com) (2 )域名托管(your-username.com)支持Rails中的多个域/子域名

两者都会转发给该用户的个性化网站,并使用我的应用程序创建。

如何在Rails中完成此操作?我已经能够得到(1)与子域名fu工作,但我不知道如何得到(2)工作。任何指针(插件,宝石,教程)等都会非常有帮助,我似乎无法找到任何指针。

谢谢!

回答

3

域的原理与子域相同 - 找到域,映射到一个帐户。

详细信息将取决于您的主机将如何处理DNS。

我目前使用Heroku及其通配符服务。 在这种情况下,该域名通过cname映射到由我的Heroku应用托管的子域。从这里我可以计算出相关的账户和细节。

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。对不起,我试图让它看起来不错,但我无法让代码块看起来不错。我把它放在pastie上:http://pastie.org/940619

Ryan Bates' screencast中的评论部分非常有帮助,并让我弄清楚了subdomain => false以及他们正在进入的其他错误。仍然没有解决问题,但!