Rails 6中如何打开Rails控制台访问多个或指定数据库
Rails多数据库场景下打开/切换指定数据库控制台的解决方案
Rails 6.0及以上版本(官方原生支持多数据库)
方法1:启动控制台时直接指定目标数据库
启动命令添加--database(可简写为--db)参数,参数值为config/database.yml中配置的数据库标识符即可:
- 示例命令:
rails console --database=secondary,也可简写为rails c --db=secondary
启动完成后,所有默认的ActiveRecord操作都会直接访问指定的secondary数据库。
方法2:已打开默认控制台的情况下动态切换数据库
无需重启控制台,直接执行连接切换命令即可:
- 切换到指定数据库:
ActiveRecord::Base.establish_connection(:secondary) - 切回默认数据库:
ActiveRecord::Base.establish_connection(:default)
同一控制台同时访问两个数据库的方案
如果需要在同一个控制台会话中同时操作两个数据库,无需来回切换连接,给非默认库的模型单独绑定连接即可:
- 先给非默认数据库创建一个抽象模型基类:
class SecondaryBase < ApplicationRecord self.abstract_class = true connects_to database: { writing: :secondary, reading: :secondary } end
- 所有属于secondary数据库的模型都继承
SecondaryBase而非默认的ApplicationRecord
配置完成后,在控制台中直接操作对应模型即可自动访问它绑定的数据库,无需额外调整连接配置。
Rails 6.0以下版本(无原生多数据库支持)
低版本Rails没有官方多数据库支持,通过手动配置连接实现:
- 先在
config/database.yml中添加非默认数据库的对应环境配置,示例:
secondary_development: adapter: mysql2 host: 127.0.0.1 port: 3306 database: your_secondary_db_name username: root password: your_password
- 打开控制台后手动建立连接即可访问指定库:
ActiveRecord::Base.establish_connection(:secondary_development) - 如需同时操作两个数据库,同样创建独立的抽象基类绑定连接即可:
class SecondaryBase < ActiveRecord::Base self.abstract_class = true establish_connection :secondary_development end
所有secondary库的模型继承该基类后,即可在同一个控制台中与默认库模型同时操作。
注意:如果只是临时查询非默认库的某张表,无需创建模型,切换连接后直接用
ActiveRecord::Base.connection.exec_query("你的SQL语句")执行原生SQL也可拿到结果。
内容的提问来源于stack exchange,提问作者Jigar Bhatt
相关产品推荐
相关产品推荐

