Rails - Separate Database per Subdomain

后端 未结 4 1941
逝去的感伤
逝去的感伤 2020-12-07 16:52

I am about to begin writing a Rails application that will allow clients to have a separate subdomain for their access to our application. Thinking from a data security stand

4条回答
  •  情话喂你
    2020-12-07 17:49

    Here is some code I use for this very problem:

    application_controller.rb

    before_filter :set_database
    
    helper_method :current_website
    
    # I use the entire domain, just change to find_by_subdomain and pass only the subdomain
    def current_website    
      @website ||= Website.find_by_domain(request.host)
    end
    
    def set_database
      current_website.use_database
    end
    
    # Bonus - add view_path
    def set_paths
      self.prepend_view_path current_website.view_path unless current_website.view_path.blank?
    end
    

    Website.rb

    def use_database
      ActiveRecord::Base.establish_connection(website_connection)
    end
    
    # Revert back to the shared database
    def revert_database
      ActiveRecord::Base.establish_connection(default_connection)
    end
    
    private
    
    # Regular database.yml configuration hash
    def default_connection
      @default_config ||= ActiveRecord::Base.connection.instance_variable_get("@config").dup
    end
    
    # Return regular connection hash but with database name changed
    # The database name is a attribute (column in the database)
    def website_connection
      default_connection.dup.update(:database => database_name)
    end
    

    Hope this helps!

提交回复
热议问题