【问题标题】:why 'rake test' is trying to connect to my development DB?为什么'rake test'试图连接到我的开发数据库?
【发布时间】:2012-01-23 09:31:45
【问题描述】:

我的 config/database.yml 是这样的:

development:
  adapter: postgresql
  database: psql_dev
  username: postgres
  min_messages: WARNING

test:
  adapter: sqlite3
  database: db/test.sqlite3
  min_messages: WARNING

当我运行 rake test:units 时,它会报错:

rake 中止!

无法连接到服务器:没有这样的文件或目录 服务器是否在本地运行并接受 Unix 域套接字“/tmp/.s.PGSQL.5432”上的连接?

为什么它没有连接到我的测试数据库(db/test.sqlite3)。

而且,如果我像 rake test RAILS_ENV=test 这样运行测试,它运行良好。

RAILS_ENV=test 不是 rake 测试的默认设置吗?

我正在运行 rails 2.3.5ruby 1.8.7,而我的 $RAILS_ENV 没有在我的 shell 中定义。

【问题讨论】:

  • echo $RAILS_ENV,有什么办法吗?粘贴你的 Rakefile。
  • 实际上,我没有自定义的 Rakefile。我只是在 rails 中使用默认的 rake 文件。而且,我的 $RAILS_ENV 为空。
  • ok,do rake -T | grep test 粘贴结果,顺便说一下 rake test 有效吗?
  • 好的,我明白了。根本原因是我在 database.yml 中用于开发的数据库连接指向无效的 psql 服务器。而且我猜'rake'会检查开发数据库是否有一些更新,在检查开发数据库后它仍在尝试使用测试数据库。所以解决方案是指向一个有效的数据库进行开发。
  • 很有趣...但这并不能解释为什么使用 rake test:units RAILS_ENV=test 运行....为什么 rails 会检查呢?

标签: ruby-on-rails rake


【解决方案1】:

发生的情况是rake test 依赖于rake db:test:prepare,它将尝试从development 数据库加载当前架构。这就是在开发数据库上运行迁移时更新测试数据库的方式

【讨论】:

    【解决方案2】:

    你有 test:units rake 任务吗?运行:

    rake test
    

    这行得通吗?您还可以粘贴以下输出:

    rake -T | grep tests
    

    【讨论】:

    • 看起来“rake 测试”成功地运行了我的功能测试,但在单元测试中失败了。但是,如果我运行“rake test:functionals”,它仍然会像“rake test:units”一样报告错误。
    • 也许你在单元测试中连接到数据库????看看你的单元测试是否需要一个套接字?
    • 但是,正如我所说,'rake test:units RAILS_ENV=test' 的效果与预期一样好。
    • 我尝试更改我的 config/database.yml,将开发部分更改为与测试部分相同。而且效果很好。所以我可以说“rake test”正在连接到开发数据库。
    • 只是将 ENV['RAILS_ENV'] 放在某个测试上,以查看运行 rake test:units 时 RAILS_ENV 的值是多少。我怀疑除了测试以外的任何东西
    猜你喜欢
    • 1970-01-01
    • 2022-09-29
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多