rails3 application add subdomain

原创文章,转载请注明来源并保留原文链接

在rails3项目中配置subdomain。假设我们有个网站www.zires.info。我想把www.zires.info/photos变成子域名的形式www.photos.zires.info。

第一步:配置路由

constraints(:subdomain=>"photos") do
  root :to => "photos#index"
end

至此,访问photos.zires.info就会到photos的index页面。但是www.photo.zires.info就不对了,所以还需要对www进行过滤。

第二步:过滤”www”

创建一个subdomain.rb文件在项目的initializers中

class Subdomain
  def self.matches?(request)
    request.subdomain.present? and request.subdomain == 'photos'
  end
end
constraints(Subdomain) do
  root :to => "photos#index"
end

这样路由就配置好了。

第三步:修改UrlHelper

我们还需要在url_for中增加一个subdomain参数,这样就可以指定url是在哪个域名下面了。

module UrlHelper

def url_for(options =nil)
  if options.kind_of?(Hash) and options.has_key?(:subdomain)
   options[:host] = with_subdomain(options.delete(:subdomain))
  end
  super
end

def with_subdomain(subdomain="")
  subdomain += "." unless subdomain.empty?
  [subdomain, request.domain].join
end

end

第四步:session共享

但是发现session不能在domain和subdomain之间共享,需要指定下

  Zires::Application.config.session_store :cookie_store, key: '_zires_session', domain: '.zires.info'

重启下就完成了。

参考链接:
http://asciicasts.com/episodes/221-subdomains-in-rails-3

Leave a Reply

Your email address will not be published. Required fields are marked *