多个域,一个rails应用程序

时间:2017-04-05 11:41:42

标签: ruby-on-rails

我正在创建一个rails 5应用程序,我希望能够通过不同的URL访问它。例如,以下两个URL将由同一个应用程序提供支持;

  • example.com.au
  • example.co.nz

让我们在每个主页上说,我想显示一个到这些国家主要城市的链接列表。每个主要城市也都有自己的页面;

  • example.com.au/sydney
  • example.co.nz/auckland

他们将共享同一个数据库。

这似乎是一个常见的问题,但我一直无法找到直截了当的答案。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:1)

我会在您的应用中的某个位置“注册”网址:

protected void Application_Start(object sender, EventArgs e)
{
    if (!ServiceController.isCachingEnabled)
    {
        SqlDependency.Stop(strConnectionString);
        SqlDependency.Start(strConnectionString);
    }
}

然后你可以在控制器中添加一个看起来像这样的方法来获取国家:

{
  "example.com.au" => "AU",
  "example.co.nz" => "NZ",
}

如果您使用数据库保存def current_country domain_name = extract_domain_name(request.original_url) Settings.domain_country_map[domain_name] end 个城市的国家/地区,则可以使用该方法进行查找。而且,对于主页,您可以显示have_many或类似内容。

我还假设您不希望current_country.cities.popular.limit(5)工作。在这种情况下,请确保将其范围限定为国家/地区:当example.co.nz/sydney网址被点击时,您执行/city_name

要使路由current_country.cities.find_by(slug: params[:city_slug])正常工作,您需要在路由文件中使用以下内容:

获取'/:city_slug',以:'cities#show'

答案 1 :(得分:-1)

可能有更好的方法,但如果你调用request.url,rails将返回当前地址。例如,我们可以在应用程序控制器中进行以下操作:

expose(:sydney?)
expose(:auckland?)

def sydney?
  request.url.include?('sydney')
end

def auckland?
  request.url.include?('auckland')
end

然后在你看来:

<% if sydney? %>
  <%= Do some stuff %>
<% elsif auckland? %>
  <%= Do some other stuff %>
<% else %>
  <%= Do stuff for no city %>
<% end %>

请记住在控制器中公开这两种方法,或者无法从视图中访问它们。