支持Rails中的多个域/子域

时间:2010-02-22 05:00:46

标签: ruby-on-rails

我有一个Rails应用程序,它具有与Tumblr类似的设置,也就是说,您可以拥有: (1)子域名托管(your-username.myapp.com) (2)域名托管(your-username.com)

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

如何在Rails中实现这一目标?我已经能够(1)使用subdomain-fu,但我不确定如何让(2)工作。任何指针(插件,宝石,教程)等都会非常有用,我似乎无法找到任何指针。

谢谢!

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;他们遇到的错误和其他错误。仍然没有解决问题!