如何将内存中的 MongoDB 与 Rails、Mongoid 和 Rspec 一起使用?

Posted

技术标签:

【中文标题】如何将内存中的 MongoDB 与 Rails、Mongoid 和 Rspec 一起使用?【英文标题】:How to use in-memory MongoDB with Rails, Mongoid, and Rspec? 【发布时间】:2021-07-11 05:45:34 【问题描述】:

在单元或集成测试中,我需要能够使用内存中的 mongoDB 只是为了方便。我能做到吗?我尝试搜索解决方案,但没有关于如何编写 mongoid.yml 以在内存中使用的教程。

除此之外,我可以只在 mongoid.yml 中使用默认环境,而不是为开发和生产编写副本吗?就像搬家一样

development:
  client:
    ...

production:
  client:
    ...

进入

default: &default
  client:
    ...

【问题讨论】:

【参考方案1】:

Mongoid 配置(在你的例子中是 mongoid.yml)告诉客户端数据库在哪里。它不配置数据库。因此,没有 Mongoid 选项可以控制数据库的启动方式。

如果您的代码使用事务,最好的办法是创建一个zram 分区并使用 mongod 的--dbpath 参数使其将其数据存储在 zram 中。如果你的内存比你知道的要多,你也可以使用 tmpfs。

如果您的代码不使用事务,请尝试--storageEngine ephemeralForTest

mongoid.yml 需要为您使用的每个环境进行配置。该文件没有默认环境的概念(由 Rails 启动应用程序时决定),也不能省略环境。但是,您可以使用 YAML 锚来避免跨环境重复配置。

【讨论】:

以上是关于如何将内存中的 MongoDB 与 Rails、Mongoid 和 Rspec 一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

将 Rails 项目从 MySQL 迁移到 MongoDB

限制MongoDB使用的内存

如何使用 MongoDB 和 Mongoid 在 Rails 3 上进行适当的数据库测试 (TDD)

如何将 Rails 6 中的 JqTree 与 webpacker 集成,树不是函数

如何将lib中的控制器方法与Rails一起使用?

使用 sencha touch 与 rails 3.1