我正在rails应用程序中使用公寓宝石。
我有一个数据库,每个租户都有模式,还有一个公共模式用于租户表。
我已排除www子域:
Apartment::Elevators::Subdomain.excluded_subdomains = ['www']
然后,如果我进入public.page.com
或www.page.com
,公寓不会切换到另一个租户,但它将停留在公共租户。当然," public“本身不是租户,只是租户之间的公共数据,所以,我不希望任何用户使用public schema。
避免这种情况的正确方法是什么?
这个应用是在AWS上运行的,所以,路由53将阻止这一点,但是,尽管我想避免rails通过这个子域服务请求。
发布于 2019-02-18 19:07:39
除了从单元中排除域之外,您还需要从路由中排除它们。在我的项目中,我使用下面的代码来管理这个:
我使用初始化器来创建excleded子域的数组。
# config/initializers/apartment/subdomain_exlusions.rb
Apartment::Elevators::Subdomain.excluded_subdomains = ['www', 'admin']
然后,我们可以在路由的helper类中使用这个数组。
# config/routes.rb
class ExcludedSubdomainConstraint
def self.matches?(request)
request.subdomain.present? && !Apartment::Elevators::Subdomain.excluded_subdomains.include?(request.subdomain)
end
end
Rails.application.routes.draw do
constraints ExcludedSubdomainConstraint do
# here routes that are accessible in subdomains
end
end
此外,您还可以将排除的子域路由到另一个约束
class DashboardSubdomainConstraint
def self.matches?(request)
Apartment::Elevators::Subdomain.excluded_subdomains.include?(request.subdomain) || request.subdomain == ''
end
end
constraints DashboardSubdomainConstraint do
namespace :dashboard do
get '/settings'
end
end
将为您提供一个类似于www.domain.com/dashboard/settinigs的访问公共租户的路由。
小费。并且您可以在关注点中使用不同的root
方法
https://stackoverflow.com/questions/54753395
复制相似问题