3

我正在将 Apartment gem 与 Unicorn 和 Nginx 一起使用。我正在使用子域电梯。在initializers/apartment/subdomain_exclusions我有Apartment::Elevators::Subdomain.excluded_subdomains = ['www']

我的理解是,公共模式现在应该与公共子域、www 子域或没有子域(即 mydomain.com)一起使用。

但是,它不能以这种方式工作。当我使用 www 或没有子域时,它使用最后访问的模式。因此,如果我只是使用另一个子域,它将使用该模式。情况不妙。我什至尝试添加config.default_schema = "public",但这无济于事。

任何想法为什么这不起作用?有没有人以类似的方式设置它,并且在没有指定子域时只使用公共模式?它可能是Nginx配置吗?

4

2 回答 2

5

我知道这个答案有点晚了,但我遇到了类似的情况,并认为我会发布解决方案。

我们需要根据请求路径切换租户。我们的路由将租户名称附加到路径的前面(即/:tenant/some/action)。问题在于所有应用程序资产显然都属于资产路径(即/assets/application.css)。此外,我们在/admin路径下放置了一个管理控制台。

为了解决这个问题,我使用了Generic中间件并传递了一个proc

config.middleware.use 'Apartment::Elevators::Generic',
                          Proc.new { |request|
                            path = request.path.split('/')[1]
                            Apartment.tenant_names.include?(path) ? path: 'public'
                      }

我如何处理路由:

scope path: ':tenant', defaults: {tenant: 'default_tenant_if_necessary'} do
    resources :model
end
于 2015-03-24T17:08:16.880 回答
0

我认为那是因为它是如何在Generic电梯中实现的。如果找不到匹配的数据库,它不会将架构切换为默认值:

https://github.com/influitive/apartment/blob/development/lib/apartment/elevators/generic.rb#L21

我不确定这是一个错误还是故意的。我建议将Subdomain电梯子类化并覆盖调用方法。

于 2016-05-09T14:12:26.213 回答