Rails has introduced support for multiple databases in application.
Rails now provides a method
connects_to which we need to specify at the
model level and mention the databases as shown below:
As specified in the
connects_to block above, all the
insert queries will be executed on the
primary database and
connects_to method must be specified in the common base class,
ApplicationRecord and this can be inherited by other models
as needed. Database clients have a limit on the number of open
connections and hence we need to specify
connects_to in a single model
base class. If this is not done, the number of open connections will add
up since Rails uses the model class name for the database connection.
database.yml for the above configuration may look like as below:
We need to specify
replica: true in our replica configuration because
Rails need a way to identify which one is a replica and which one is
replica database name will be the same,
but the user permissions should be different.
Outside the model, we might want to connect to a completely different database.
Let’s say for the above example, if we have another archive database for
storing deactivated user, we can use Rails
connected_to method as
:archive_db is the database key in our
database.yml config file.
We can connect to a different database by using the role parameter too.
By default the
:writing role will be used since all connections must be
assigned a role. If you would like to use a different role you can pass
a hash to the database:
Rails by default expect database roles to be
reading for the primary
and replica respectively. If we want to have our roles, we need to create them
and specify them in our application config.
- When using the database key, a new connection will be established every time. It is not recommended to use this outside of one-time scripts.