gpt4 book ai didi

ruby-on-rails - 如何在我的 RSpec 测试中包含大型支持数据库?

转载 作者:行者123 更新时间:2023-11-28 20:00:23 24 4
gpt4 key购买 nike

我有 3 个支持我的 Rails 3.2 应用程序的大型只读数据库,其中的值经过检查,其中一些与辅助信息一起存储在我的主数据库中。我将这些设置为我的开发和生产 Postgres 数据库中的模式。

这是错误的做法吗?由于它们只是只读的,是否有更好的方法让它们存在于自己的 Postgres 数据库中并从那里引用它们?我认为 PG gem 不是那样工作的。

如果它们确实需要出现在每个环境中,我如何确保它们是我的测试环境的一部分?

我不能只将这些环境复制到test,它们会在我每次运行时崩溃:

rake db:test:prepare

最佳答案

如果我没理解错的话:

  • 您拥有 3 个大型数据库,其中包含对运行您的应用程序必不可少的支持数据
  • 由于它们很大,您不想将它们存储为 XML/JSON/序列化文件,您更愿意将它们放在数据库中以便于查询
  • 您希望能够在您的所有环境和服务器中访问相同的 3 个数据库

因此,您所拥有的基本上是与源代码配置 相当的东西,理想情况下,它们应该是您的代码库的一部分。即它是一个 fixture,虽然是数据库 fixture 而不是 YAML 或 JSON fixture。

理想的解决方案是,您应该将该数据库转储转换为固定装置。方法如下:

  • 参加 PostgreSQL backup of the data , 并将其保存为 test/fixtures/your_model_name.dmp
  • 创建一个新的 ERB fixture test/fixtures/your_model_name.erb。 ERB fixtures 可以有 Ruby 代码
  • 在 ERB 夹具中添加以下代码:

    <%
    cfg = YourModel.connection_config
    FileUtils.sh "psql " +
    "-u #{cfg['username']} " +
    "-p #{cfg['password']} " +
    "-h #{cfg['host'] || 'localhost'} " +
    " < #{Rails.root + '/test/fixtures/yourmodel.dmp'}"
    %>

由于是ERB文件,它会自动运行里面的代码,并将数据导入PostgreSQL。唯一的问题是您的路径中需要 psql。如果您的应用服务器和数据库位于不同的位置,那么您需要通过 ssh 连接到服务器,然后运行导入。

另一种选择是直接将这些数据库保存为 SQLite 文件,然后单独针对这 3 个模型 use a separate connection .这适用范围更广,除非您在主应用程序表和这 3 个表之间没有任何直接外键引用和 RESTRICT/CASCADE 定义。但我猜你的主数据库和这 3 个数据库之间已经没有直接关系,因为在大多数情况下跨数据库引用很难处理。

关于ruby-on-rails - 如何在我的 RSpec 测试中包含大型支持数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16388637/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com