establish_connection

    # Establishes the connection to the database. Accepts a hash as input where    # the :adapter key must be specified with the name of a database adapter (in lower-case)    # example for regular databases (MySQL, Postgresql, etc):    #    #   ActiveRecord::Base.establish_connection(    #     :adapter  => "mysql",    #     :host     => "localhost",    #     :username => "myuser",    #     :password => "mypass",    #     :database => "somedatabase"    #   )    #    # Example for SQLite database:    #    #   ActiveRecord::Base.establish_connection(    #     :adapter => "sqlite",    #     :database  => "path/to/dbfile"    #   )    #    # Also accepts keys as strings (for parsing from yaml for example):    #   ActiveRecord::Base.establish_connection(    #     "adapter" => "sqlite",    #     "database"  => "path/to/dbfile"    #   )    #    # The exceptions AdapterNotSpecified, AdapterNotFound and ArgumentError    # may be returned on an error.    def self.establish_connection(spec = nil)      case spec        when nil          raise AdapterNotSpecified unless defined? RAILS_ENV          establish_connection(RAILS_ENV)        when ConnectionSpecification          clear_active_connection_name          @active_connection_name = name          @@defined_connections[name] = spec        when Symbol, String          if configuration = configurations[spec.to_s]            establish_connection(configuration)          else            raise AdapterNotSpecified, "#{spec} database is not configured"          end        else          spec = spec.symbolize_keys          unless spec.key?(:adapter) then raise AdapterNotSpecified, "database configuration does not specify adapter" end          begin            require 'rubygems'            gem "activerecord-#{spec[:adapter]}-adapter"            require "active_record/connection_adapters/#{spec[:adapter]}_adapter"          rescue LoadError            begin              require "active_record/connection_adapters/#{spec[:adapter]}_adapter"            rescue LoadError              raise "Please install the #{spec[:adapter]} adapter: `gem install activerecord-#{spec[:adapter]}-adapter` (#{$!})"            end          end          adapter_method = "#{spec[:adapter]}_connection"          if !respond_to?(adapter_method)            raise AdapterNotFound, "database configuration specifies nonexistent #{spec[:adapter]} adapter"          end          remove_connection          establish_connection(ConnectionSpecification.new(spec, adapter_method))      end    end

remove_connection
    # Remove the connection for this class. This will close the active    # connection and the defined connection (if they exist). The result    # can be used as an argument for establish_connection, for easily    # re-establishing the connection.    def self.remove_connection(klass=self)      spec = @@defined_connections[klass.name]      konn = active_connections[klass.name]      @@defined_connections.delete_if { |key, value| value == spec }      active_connections.delete_if { |key, value| value == konn }      konn.disconnect! if konn      spec.config if spec    end