我有一个类似于Tumblr设置的Rails应用程序,也就是说,您可以有: (1)子域托管(your-username.myapp.com) (2 )域名托管(your-username.com)支持Rails中的多个域/子域名
两者都会转发给该用户的个性化网站,并使用我的应用程序创建。
如何在Rails中完成此操作?我已经能够得到(1)与子域名fu工作,但我不知道如何得到(2)工作。任何指针(插件,宝石,教程)等都会非常有帮助,我似乎无法找到任何指针。
谢谢!
我有一个类似于Tumblr设置的Rails应用程序,也就是说,您可以有: (1)子域托管(your-username.myapp.com) (2 )域名托管(your-username.com)支持Rails中的多个域/子域名
两者都会转发给该用户的个性化网站,并使用我的应用程序创建。
如何在Rails中完成此操作?我已经能够得到(1)与子域名fu工作,但我不知道如何得到(2)工作。任何指针(插件,宝石,教程)等都会非常有帮助,我似乎无法找到任何指针。
谢谢!
域的原理与子域相同 - 找到域,映射到一个帐户。
详细信息将取决于您的主机将如何处理DNS。
我目前使用Heroku及其通配符服务。 在这种情况下,该域名通过cname映射到由我的Heroku应用托管的子域。从这里我可以计算出相关的账户和细节。
编辑:我发现了一个更简单的方法: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以及他们正在进入的其他错误。仍然没有解决问题,但!