使用多个数据库测试Rails应用程序

时间:2015-03-30 16:14:05

标签: ruby-on-rails ruby database testing activerecord

我有一个rails应用程序,它在 production 环境UsersProcess中使用两个数据库。 Users模型使用此自定义ActiveRecord类:

class UserActiveRecord < ActiveRecord::Base
    establish_connection "#{Rails.env}_users_db"
end

class User < UserActiveRecord
    ...

请注意,根据环境建立与特定数据库的连接。为简化起见,在 testing 环境中,我有一个包含两个生产数据库中所有表的数据库,而我的database.yml文件看起来像这样:

test:
    adapter: postgresql
    database: db_test
    host: localhost
    pool: ...
    timeout: ...
    username: ...
    password: ...

test_users_db:
    adapter: postgresql
    database: db_test  <--- Notice that this is the same database only in test env
    host: localhost
    pool: ...
    timeout: ...
    username: ...
    password: ...

应用程序在生产中运行良好,但是当我运行任何引用User类的测试时,测试会在使用User且没有任何反应的确切位置阻塞,但它并没有; t显示任何错误,它不会退出,只是一直等待。

我仔细检查并且表USERS存在于测试数据库中,实际上如果我手动删除它,我会得到表格不存在的错误,当我再次创建它时,我得到了上一段报告的行为相同。

我不知道为什么会这样,有关如何解决这个问题的任何想法?或者我如何调试它以便我可以找到问题的根源?如果它有帮助,我使用Ruby 1.9.3,Ruby on Rails 3.2.19和PostgreSQL 9.3.5;任何其他详细信息将根据需要发布。

1 个答案:

答案 0 :(得分:0)

您是否尝试过明确说明它是同一个数据库?尝试编辑database.yml文件,如下所示:

test: &default_test
    adapter: postgresql
    database: db_test
    host: localhost
    pool: ...
    timeout: ...
    username: ...
    password: ...

test_users_db:
    <<: *default_test