Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在rails中实现多租户_Ruby On Rails_Ruby_Multi Tenant - Fatal编程技术网

Ruby on rails 在rails中实现多租户

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 &

我们在各自的在线VPS服务器上为多个客户端部署了一个中型应用程序。所有客户端的代码都是相同的。维护正在成为一个巨大的负担。即使是同样的改变,我们也在很多服务器上部署了。因此,我们计划为我们的应用程序实现多租户功能

我们遇到了一些gem,但这不符合目的,因此我们计划实施它

我们创建了一个新的模型
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