如何在Rails 6中管理多个数据库

随着Rails 6的发布,宣布的新功能之一是对多个数据库的支持。

当在我们的一个应用程序中,我在努力有效地管理独立的DB时,这让我大吃一惊。 人们想要这种支持的原因有很多,例如:

  • 使用SQL数据库存储用户数据,使用NoSQL存储位置数据
  • 有多个SQL数据库来管理单独的应用程序,但是一个应用程序可能需要直接访问另一个数据库
  • 管理多个NoSQL和Redis数据库以存储不同种类的数据等

当面对使用多个数据库时,通常一个作为主服务器,而其他服务器作为从服务器。 因为我是在Rails 6发布之前进行管理的,所以我使用了一种不太理想的方式(读取修补程序/ hacky)来完成此任务。 我为第二个数据库创建了一个单独的YAML文件,用于存储连接信息。 这是一个示例文件:

second_database.yaml
  adapter: db_adapter
  encoding: db_encoding
  pool: db_pool
  username: db_username
  password: db_password
  database: db_name
  host: db_host

要访问多个数据库,每次:

  • 通过从YAML文件中读取连接信息来建立连接
  • config = YAML.load_file(second_database.yaml ')
    connection = ActiveRecord::Base.establish_connection(
      adapter:  config[' adapter '],
      host:     config[' host '],
      database: config[' database '],
      username: config[' username '],
      password: config[' password ']
    )
  • 查询数据
  • employees = connection.execute( "SELECT * from employees" )
  • 关闭连接
  • connection.close

好头疼!

但是,发布新的Rails 6时,您可能不必费心(并且可以自己编写代码)来管理多个数据库。

Rails 6启动后,我就升级了我的应用程序,以利用多个数据库支持的好处。 让我们逐步了解升级并为多个数据库进行设置。

  • 首先,检查并更新ruby版本至2.5,因为rails 6必须要求ruby 2.5或更高版本。
  • 将您的ruby版本升级到2.5或更高版本:
    • 在ruby更新期间,可能仅由于版本升级而获得语法错误或弃用警告。
    • 请逐步更新红宝石版本-不要直接跳至最新的红宝石版本; 这会给您带来很多问题。
    • 更新到下一个增量版本; 解决错误和警告; 运行并解决测试用例,然后重复该过程。
  • 将rails升级到5.2系列的最新版本:
    • 由于本文仅涵盖从导轨5.2到导轨6的升级准则; 请确保您使用的是5.x系列的最新版本。
  • 更新Rails 6版本的gemfile:
    • 现在是时候更新Gemfile中的rails版本了。 在您的gem文件中更改rails gem版本。
    • 在终端中运行bundle update rails命令以更新rails和其他相关的gem。
  • 在终端中运行rails app:update:
    • 通过运行此命令,您会发现一些新的配置设置已添加到您的应用程序。 我建议您对每个文件更改使用差异工具选项(d)。
  • 取消注释new_framework_defaults_6_0.rb中的默认值:
  • 运行迁移:
    • 现在运行bundle install安装剩余的gem,并运行迁移并解决问题(如果有)。
  • 运行并修复TestCases:
    • 大规模升级之后,让我们测试您的应用程序。 运行您的测试案例; 解决是否有任何失败,并解决弃用警告。
  • 启动本地主机并执行手动测试:
    • 我建议您对应用程序进行一轮手动测试。 赶紧动手,开始手动测试您的应用程序。

宾果游戏 ,现在您可以在Rails 6上运行!

现在,让我们进一步进行使用Rails 6的多个数据库设置。

使用rails 6的多个数据库支持,您可以拥有多个数据库,并且每个数据库都有一个副本(只读副本)。

现在,考虑具有单个主数据库的Rails应用程序,现在升级到Rails 6之后,您需要为一些新表添加新数据库。 您的database.yml当前版本如下:

带导轨6; 您可以为主数据库添加副本,也可以通过更新database.yml来添加新数据库,如下所示:

考虑将副本用于数据库时需要注意的几点:

  • 对于主数据库和副本数据库,数据库名称应该相同,因为两个数据库都包含相同的数据。 使用副本数据库时,您需要添加一个replica: true数据库设置为replica: true
  • 副本数据库和主数据库的用户名应该不同; 主要用户将具有读取和写入权限,而副本用户将仅具有读取权限; 别写。
  • 添加新数据库时,还需要注意迁移路径。 要实现它,您需要如上所述在database.yml文件中添加migrations_path设置。 尽管我们有一个副本数据库,但我们没有为其设置迁移路径。

完成此步骤后,您将添加一个新数据库。 现在,让我们为其建立一个模型。 要使用新的数据库,您需要向您的应用程序添加一个抽象模型类。 如下所示:

现在您可以访问新数据库了; 现在让我们简要地讨论多种数据库功能:

    1.主数据库和副本数据库之间的自动连接切换:

    要对应用程序使用只读数据库,您需要配置中间件以进行自动连接切换。

    自动连接切换使您的应用程序可以基于HTTP请求方法在主数据库和副本数据库之间进行切换。
    例如,如果您的应用程序收到POST,PUT,DELETE或PATCH请求,则该应用程序将自动写入主数据库。 并且,对于诸如GET或HEAD之类的请求,应用程序从副本之一读取。

    配置中间件以进行自动连接切换; 取消注释或将以下行添加到应用程序配置。

    仅当读取请求在我们上面配置的范围内时,Rails才将GET或HEAD请求发送到主请求。 默认情况下,它将设置为2秒。 您可以根据数据库基础结构自由更改它。

    2. 在主数据库和副本数据库之间进行手动连接切换:

    手动连接到副本数据库或主数据库; rails提供ActiveRecord::Base.connected_to方法。

    有时,无论请求类型如何,您的应用程序都需要连接到主数据库或副本数据库。 在这种情况下,您可以利用ActiveRecord提供的connected_to方法。

    通过使用上面的代码,无论请求类型如何,都可以强制您的应用程序连接到博客的数据库。

    现在,此命令使用该连接读取博客数据库的副本并使用它。

    Rails 6的多个数据库不支持哪些功能?

    他们来了

    • 分片
    • 副本的负载平衡
    • 跨多个数据库联接

    我们可以期望这些功能很快就会出现,并可以帮助我们使用Rails 6 super高效地配置,使用和管理多个数据库。

    From: https://hackernoon.com/how-to-manage-multiple-databases-in-rails-6-ye6x3ypv

    • 0
      点赞
    • 1
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值