如何创建动态子域rails

时间:2015-12-14 10:34:47

标签: ruby-on-rails ruby url-routing

如何为在我的网站上注册的每个用户创建子域?例如userone.mysite.com和usertwo.mysite.com。

在php中可以使用apache虚拟主机完成,但我无法弄清楚如何在Ruby on Rails中执行相同操作。以下是如何在apache中完成的

<VirtualHost *:80>
    ServerName www.mysite.com
    ServerAlias mysite.com *.mysite.com
    DocumentRoot /www/domain
</VirtualHost>

我浏览了很多博客但找不到解决方案。 请建议。

2 个答案:

答案 0 :(得分:1)

 <VirtualHost *:80>
      ServerName mysite.com
      ServerAlias *.my_site.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /var/www/html/my_site
      <Directory /var/www/html/my_site>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
         # Uncomment this if you're on Apache >= 2.4:
         Require all granted
      </Directory>
   </VirtualHost>

并且不要忘记在DNS中更改您的域名的cname *条目

答案 1 :(得分:0)

除了Dinesh Saini回答 - 您还需要相应地更新Rails配置。例如,如果您需要深层子域,则应更改 staging.rb中的config.action_dispatch.tld_length,你应该重新检查routes.rb。

实例:我必须通过子域实现商店展示 - 示例网址 my-shop.shop.testapp.com。所以除了服务器配置更改之外我做了什么

   constraints (lambda { |req| req.subdomains[1] == 'shop' }) do
      get '/', to: 'shopes#show', as: :shop
   end

在控制器中查找资源

   Shop.find_by(id: request.subdomains[0])

我也设置了

   config.action_dispatch.tld_length = 2

我这是为了暂存env,因为它有这样的URL staging.testapp.com所以我需要另一个子域级别。我认为对你而言,检查它是否有1是唯一的好处。