rails 4.1中的子域

时间:2014-06-21 02:28:38

标签: ruby-on-rails ruby subdomain ruby-on-rails-4.1

我尝试设置我的rails 4.1 app适用于多个子域名,我看到Rails Casts - #221,但我有任何问题:

我在制作中的域名是:transporte.adm.br *无法显示! 因为它有2个域adm.br,所以我无法完成这项工作。

我的/ etc / hosts:

127.0.0.1   localhost.localdomain localhost
::1     localhost6.localdomain6 localhost6
127.0.0.1   transporte.adm.br
127.0.0.1   *.transporte.adm.br

routes.rb中:

Rails.application.routes.draw do

  get '/' => 'login#index', :constraints => { :subdomain => /\bsecure\b/ }

  resources :client
  constraints(Subdomain) do
    get '/' => 'client#index'
  end

  root :to => 'home#index'
end

url_helper:

 module UrlHelper
  def with_subdomain(subdomain)
    subdomain = (subdomain || '')
    subdomain += '.' unless subdomain.empty?
    [subdomain, request.domain(2), request.port_string].join
  end

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

subdomain.rb:

class Subdomain
  def self.matches?(request)
    request.subdomain(2).present? && request.subdomain(2) != 'www'
  end
end

我要做的是:当我访问路线时secure.transporte.adm.br => '登录#指数'当我访问任何其他子域路由到=> '客户端#索引'没有子域to => '#家指数'

使用lvh.me:3000工作正常,但是当我尝试使用我的域transporte.adm.br时没有! 当我使用transporte.adm.br访问任何路线时,没有任何事情发生......

谢谢大家!

1 个答案:

答案 0 :(得分:1)

您需要做的是告诉Rails您的TLD的长度。

将此添加到您正确的环境中(最有可能config/environments/production.rb

config.action_dispatch.tld_length = 2

然后request.subdomain应自动为您返回正确的部分