数据库

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

2020-07-23 16:35:48 | 来源:中培企业IT培训网

随着Rails 6的发布,宣布的新功能之一是对多个数据库的支持。那么如何在Rails 6中管理多个数据库?当我们一个应用程序中,努力有效地管理独立的DB时,会让你大吃一惊。人们想要Rails 6支持多个数据库的原因有很多,使用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应用程序,现在升级到Rails 6之后,您需要为一些新表添加新数据库。您的database.yml当前版本如下:

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

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

.对于主数据库和副本数据库,数据库名称应该相同,因为两个数据库都包含相同的数据。使用副本数据库时,您需要添加一个replica: true 数据库设置。

.副本数据库和主数据库的用户名应该不同;主用户将同时具有读取和写入权限,而副本用户将仅具有读取权限别写。

.添加新数据库时,还需要注意迁移路径。要实现它,您需要添加migrations_path如上所示,在database.yml文件中进行设置。尽管我们有一个副本数据库,但我们没有为其设置迁移路径。

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

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

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

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

自动连接切换使您的应用程序可以基于HTTP请求方法在主数据库和副本数据库之间进行切换。

例如,如果您的应用程序收到POST,PUT,DELETE或PATCH请求,则该应用程序将自动写入主数据库。并且,对于诸如GET或HEAD之类的请求,应用程序从副本之一读取。

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

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

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

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

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

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

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

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

.分片

.副本的负载平衡

.跨多个数据库联接

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

好了,关于如何在Rails 6中管理多个数据库的信息,介绍到这里就结束了,想了解更多关于数据库的信息,请继续关注中培伟业。

标签: 数据库