Module: ActiveRecord::ConnectionHandling
Relationships & Source Files | |
Extension / Inclusion / Inheritance Descendants | |
Extended In:
| |
Defined in: | activerecord/lib/active_record/connection_handling.rb, activerecord/lib/active_record/connection_adapters/mysql2_adapter.rb, activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb |
Constant Summary
-
DEFAULT_ENV =
# File 'activerecord/lib/active_record/connection_handling.rb', line 6#=> { RAILS_ENV.call || "default_env" }
-
RAILS_ENV =
# File 'activerecord/lib/active_record/connection_handling.rb', line 5#=> { (Rails.env if defined?(Rails.env)) || ENV["RAILS_ENV"].presence || ENV["RACK_ENV"].presence }
Instance Attribute Summary
-
#connected? ⇒ Boolean
readonly
Returns
true
if Active Record is connected. -
#connection_specification_name
rw
Return the specification name from the current class or its parent.
- #connection_specification_name=(value) rw
Instance Method Summary
- #clear_active_connections!
- #clear_all_connections!
- #clear_reloadable_connections!
-
#connection
Returns the connection currently associated with the class.
-
#connection_config
Returns the configuration of the associated connection as a hash:
- #connection_pool
-
#establish_connection(config = nil)
Establishes the connection to the database.
- #flush_idle_connections!
- #remove_connection(name = nil)
- #retrieve_connection
Instance Attribute Details
#connected? ⇒ Boolean
(readonly)
Returns true
if Active Record is connected.
# File 'activerecord/lib/active_record/connection_handling.rb', line 122
def connected? connection_handler.connected?(connection_specification_name) end
#connection_specification_name (rw)
Return the specification name from the current class or its parent.
# File 'activerecord/lib/active_record/connection_handling.rb', line 96
def connection_specification_name if !defined?(@connection_specification_name) || @connection_specification_name.nil? return self == Base ? "primary" : superclass.connection_specification_name end @connection_specification_name end
#connection_specification_name=(value) (rw)
[ GitHub ]# File 'activerecord/lib/active_record/connection_handling.rb', line 93
attr_writer :connection_specification_name
Instance Method Details
#clear_active_connections!
[ GitHub ]# File 'activerecord/lib/active_record/connection_handling.rb', line 142
delegate :clear_active_connections!, :clear_reloadable_connections!, :clear_all_connections!, :flush_idle_connections!, to: :connection_handler
#clear_all_connections!
[ GitHub ]# File 'activerecord/lib/active_record/connection_handling.rb', line 142
delegate :clear_active_connections!, :clear_reloadable_connections!, :clear_all_connections!, :flush_idle_connections!, to: :connection_handler
#clear_reloadable_connections!
[ GitHub ]# File 'activerecord/lib/active_record/connection_handling.rb', line 142
delegate :clear_active_connections!, :clear_reloadable_connections!, :clear_all_connections!, :flush_idle_connections!, to: :connection_handler
#connection
Returns the connection currently associated with the class. This can also be used to “borrow” the connection to do database work unrelated to any of the specific Active Records.
# File 'activerecord/lib/active_record/connection_handling.rb', line 89
def connection retrieve_connection end
#connection_config
Returns the configuration of the associated connection as a hash:
ActiveRecord::Base.connection_config
# => {pool: 5, timeout: 5000, database: "db/development.sqlite3", adapter: "sqlite3"}
Please use only for reading.
# File 'activerecord/lib/active_record/connection_handling.rb', line 109
def connection_config connection_pool.spec.config end
#connection_pool
[ GitHub ]# File 'activerecord/lib/active_record/connection_handling.rb', line 113
def connection_pool connection_handler.retrieve_connection_pool(connection_specification_name) || raise(ConnectionNotEstablished) end
#establish_connection(config = nil)
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: "mysql2",
host: "localhost",
username: "myuser",
password: "mypass",
database: "somedatabase"
)
Example for SQLite database:
ActiveRecord::Base.establish_connection(
adapter: "sqlite3",
database: "path/to/dbfile"
)
Also accepts keys as strings (for parsing from YAML for example):
ActiveRecord::Base.establish_connection(
"adapter" => "sqlite3",
"database" => "path/to/dbfile"
)
Or a URL:
ActiveRecord::Base.establish_connection(
"postgres://myuser:mypass@localhost/somedatabase"
)
In case {ActiveRecord::Base
.configurations} is set (Rails automatically loads the contents of config/database.yml into it), a symbol can also be given as argument, representing a key in the configuration hash:
ActiveRecord::Base.establish_connection(:production)
The exceptions AdapterNotSpecified
, AdapterNotFound
and ArgumentError
may be returned on an error.
# File 'activerecord/lib/active_record/connection_handling.rb', line 49
def establish_connection(config = nil) raise "Anonymous class is not allowed." unless name config ||= DEFAULT_ENV.call.to_sym spec_name = self == Base ? "primary" : name self.connection_specification_name = spec_name resolver = ConnectionAdapters::ConnectionSpecification::Resolver.new(Base.configurations) spec = resolver.resolve(config).symbolize_keys spec[:name] = spec_name connection_handler.establish_connection(spec) end
#flush_idle_connections!
[ GitHub ]# File 'activerecord/lib/active_record/connection_handling.rb', line 142
delegate :clear_active_connections!, :clear_reloadable_connections!, :clear_all_connections!, :flush_idle_connections!, to: :connection_handler
#remove_connection(name = nil)
[ GitHub ]# File 'activerecord/lib/active_record/connection_handling.rb', line 126
def remove_connection(name = nil) name ||= @connection_specification_name if defined?(@connection_specification_name) # if removing a connection that has a pool, we reset the # connection_specification_name so it will use the parent # pool. if connection_handler.retrieve_connection_pool(name) self.connection_specification_name = nil end connection_handler.remove_connection(name) end
#retrieve_connection
[ GitHub ]# File 'activerecord/lib/active_record/connection_handling.rb', line 117
def retrieve_connection connection_handler.retrieve_connection(connection_specification_name) end