尽管这里和其他地方有几个类似的问题,但我一直无法找到可行的解决方案。对于Rails 3,似乎没有回答这个问题,所以可以这样:
我有一个当前允许用户创建包含其应用程序实例的子域的应用程序。在Rails 2中,最好使用subdomain-fu gem来提供服务,而在Railscast中,根据Railscast- http: //railscasts.com/episodes/221-subdomains-in-rails-3而言,它要简单得多。
那是好东西,但我也想为用户提供将自己的域名与他们的帐户关联的选项。因此,尽管他们可能拥有http://userx.mydomain.com,但我希望他们也选择关联http://userx.com。
我在Rails 2中找到了一些这样做的参考,但是这些技术似乎不再起作用了(特别是这一技术:https : //feefighters.com/blog/hosting-multiple-domains-from-a-single-rails -app /)。
谁能推荐一种使用路由的方法来接受任意域并将其传递给控制器,以便我可以显示适当的内容?
更新:由于Leonid的及时响应以及对代码的重新审视,我现在已经得到了大部分答案。最终,它需要对我正在使用的现有子域代码(来自Railscast解决方案)进行添加,然后在route.rb中添加一些内容。我还没到那儿,但我想发布到目前为止的内容。
在lib / subdomain.rb中:
class Subdomain
def self.matches?(request)
request.subdomain.present? && request.subdomain != "www"
end
end
class Domain
def self.matches?(request)
request.domain.present? && request.domain != "mydomain.com"
end
end
我添加了第二堂课,以模仿第一堂课,这是众所周知的工作方式。我只需添加一个条件,以确保传入域不是我托管主站点的域。
此类在routes.rb中使用:
require 'subdomain'
constraints(Domain) do
match '/' => 'blogs#show'
end
constraints(Subdomain) do
match '/' => 'blogs#show'
end
在这里,我将在现有子域代码(再次可以正常工作)的前面加上节来检查域。如果此服务器响应该域,而不是主站点运行所在的域,请转发到指定的控制器。
尽管这似乎可行,但我还没有完全解决整个问题,但是我认为这个特殊问题已经解决了。