为什么ActiveRecord :: Base.connected?调用establish_connection后为false

Dmi*_*mov 10 ruby testing activerecord

我开发Sinatra应用程序并在那里使用ActiveRecord来处理数据库,但我遇到了一个问题.我为一个模型写了一个测试,它打破了

SQLite3 :: CantOpenException:无法打开数据库文件

使用以下代码在test_helper.rb中建立与数据库的连接:

Dir.chdir('..') do
  ActiveRecord::Base.establish_connection(db_config)
end
Run Code Online (Sandbox Code Playgroud)

ActiveRecord::Base.connected?得到假.如果我User.find(:all)在连接建立测试之后调用将会通过并且ActiveRecord::Base.connected?将为真.为什么?我不明白.

And*_*iep 6

ActiveRecord::Base.establish_connection仅设置连接,并且在请求与数据库的连接之前,ActiveRecord实际上不会连接.以下代码可以帮助您强制ActiveRecord为连接池建立连接:

connected = ActiveRecord::Base.connection_pool.with_connection { |con| con.active? }  rescue false
Run Code Online (Sandbox Code Playgroud)

rescue false隐藏了几个潜在的异常(如PG::ConnectionBad).有关更多信息,请参阅以下文档:with_connection.


Jas*_*rip 0

确保并rake db:create在您的测试环境中运行。看起来数据库不存在并且在 SQLite 中应该依赖于该目录。