ruby-on-rails – 创建新的租户公寓宝石 – 总是重启?

ruby-on-rails – 创建新的租户公寓宝石 – 总是重启?,第1张

概述我有一个rails 4.2多租户应用程序使用公寓宝石,这是非常棒的. 每家公司都有自己的子域名.我正在使用一个自定义的“电梯”,它查看完整的请求主机以确定应该加载哪个“租户”. 当我创建一个新公司时,我有一个after_create挂钩来创建具有适当请求主机的新租户. 这似乎总是需要在开发和生产中重新启动服务器,否则我会收到Tenant Not Found错误. 它在开发中使用sqlite,在生产 我有一个rails 4.2多租户应用程序使用公寓宝石,这是非常棒的.

每家公司都有自己的子域名.我正在使用一个自定义的“电梯”,它查看完整的请求主机以确定应该加载哪个“租户”.

当我创建一个新公司时,我有一个after_create挂钩来创建具有适当请求主机的新租户.

这似乎总是需要在开发和生产中重新启动服务器,否则我会收到Tenant Not Found错误.

它在开发中使用sqlite,在生产中使用postgres.

每次创建新租户时,是否真的必须重新启动服务器?有没有自动化的方法来做到这一点?也许只是重新加载初始化程序会起作用,但我不知道该怎么做/如果可能的话?

我已经搞乱了一个月,但却找不到有效的解决方案.请帮忙!

初始化/ apartment.rb

require 'apartment/elevators/host_hash'config.tenant_names = lambda { Company.pluck :request_host }Rails.application.config.mIDdleware.use 'Apartment::Elevators::HostHash',Company.full_hosts_hash

初始化/ host_hash.rb

require 'apartment/elevators/generic'module Apartment    module Elevators    class HostHash < Generic      def initialize(app,hash = {},processor = nil)        super app,processor        @hash = hash      end      def parse_tenant_name(request)        if request.host.split('.').first == "www"            nil        else            raise TenantNotFound,"Cannot find tenant for host #{request.host}" unless @hash.has_key?(request.host)            @hash[request.host]        end      end    end    endend

公司模式

after_create :create_tenantdef self.full_hosts_hash    Company.all.inject(Hash.new) do |hash,company|      hash[company.request_host] = company.request_host      hash    endendprivate    def create_tenant        Apartment::Tenant.create(request_host)    end

什么最终工作

我更改了电梯配置,以远离HostHash,它位于公寓宝石中,并使用完全自定义的.主要基于公寓gem github上的一个问题:https://github.com/influitive/apartment/issues/280

初始化/ apartment.rb

Rails.application.config.mIDdleware.use 'BaseSite::BaseElevator'

应用/中间件/ base_site.rb

require 'apartment/elevators/generic'module BaseSite    class BaseElevator < Apartment::Elevators::Generic        def parse_tenant_name(request)          company = Company.find_by_request_host(request.host)          return company.request_host unless company.nil?          fail StandardError,"No website found at #{request.host} not found"        end    endend
解决方法 我认为问题可能是你的host_hash.rb存在于initializers目录中.根据您在评论中引用的 Apartment gem ReadME,它不应该位于名为“中间件”的文件夹中吗?在该示例中,他们使用了app / mIDdleware / my_custom_elevator.rb.也许你的看起来像app / mIDdleware / host_hash.rb?

现在文件在初始化器中,所以它从那里加载.但是你的apartment.rb通过Rails.application.config.mIDdleware.use引用它.只是一个预感,但除了最初加载它,它可能在一个不存在的中间件文件夹中寻找它.我会继续创建应用程序/中间件,将文件放在那里,看看会发生什么.不确定,但您可能还需要更改require路径.

如果有帮助,请告诉我们.

总结

以上是内存溢出为你收集整理的ruby-on-rails – 创建新的租户公寓宝石 – 总是重启?全部内容,希望文章能够帮你解决ruby-on-rails – 创建新的租户公寓宝石 – 总是重启?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/langs/1271183.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存