Ruby on rails 在rails中实现多租户
我们在各自的在线VPS服务器上为多个客户端部署了一个中型应用程序。所有客户端的代码都是相同的。维护正在成为一个巨大的负担。即使是同样的改变,我们也在很多服务器上部署了。因此,我们计划为我们的应用程序实现多租户功能 我们遇到了一些gem,但这不符合目的,因此我们计划实施它 我们创建了一个新的模型Ruby on rails 在rails中实现多租户,ruby-on-rails,ruby,multi-tenant,Ruby On Rails,Ruby,Multi Tenant,我们在各自的在线VPS服务器上为多个客户端部署了一个中型应用程序。所有客户端的代码都是相同的。维护正在成为一个巨大的负担。即使是同样的改变,我们也在很多服务器上部署了。因此,我们计划为我们的应用程序实现多租户功能 我们遇到了一些gem,但这不符合目的,因此我们计划实施它 我们创建了一个新的模型Client,并创建了一个抽象超类,它继承自ActiveRecord::Base,所有依赖类都继承这个类。现在,当我想从我的超类中添加default\u范围时,问题来了 class SuperClass &
Client
,并创建了一个抽象超类
,它继承自ActiveRecord::Base
,所有依赖类都继承这个类。现在,当我想从我的超类中添加default\u范围时,问题来了
class SuperClass < ActiveRecord::Base
self.abstract_class = true
default_scope where(:client_id => ???)
end
class超类??)
结束
那个???对每个用户进行更改。所以我不能给出静态值。但我不确定如何动态设置此范围。那么我们能做些什么呢 我们执行以下操作(您可能不需要线程安全部分):
class客户端Client.current.id):nil}
结束
然后在ApplicationController中,我们添加一个before过滤器,以基于子域设置当前客户端:
class ApplicationController < ActionController::Base
before_filter :set_current_client
def set_current_client
Client.current = Client.find_by_subdomain(request.subdomain)
end
end
class ApplicationController
这并不能回答问题,但您是否考虑过使用Capistrano跨多台服务器部署?这可能会修复您的维护问题,而无需任何必要的代码更改。@ChrisHeald它不仅仅是部署。V有多个问题,所以我们想转向多租户。
class ApplicationController < ActionController::Base
before_filter :set_current_client
def set_current_client
Client.current = Client.find_by_subdomain(request.subdomain)
end
end