Rails无法使用ActiveRecord :: Establishment_connection连接到数据库

时间:2019-09-05 11:23:45

标签: ruby-on-rails ruby activerecord

我正在打开Rails控制台会话并执行:

2.6.3 :048 > ActiveRecord::Base.connected?
 => true 
2.6.3 :049 > ActiveRecord::Base.connection_pool.disconnect!
 => [] 
2.6.3 :050 > ActiveRecord::Base.connected?
 => false 
2.6.3 :051 > ActiveRecord::Base.establish_connection(:development)
 => #<ActiveRecord::ConnectionAdapters::ConnectionPool:0x00 ... >
2.6.3 :052 > ActiveRecord::Base.connected?
 => false
2.6.3 :053 > SomeModel.connection
 => #<ActiveRecord::ConnectionAdapters::PostgreSQLAdapter:0x00 ...>
2.6.3 :055 > ActiveRecord::Base.connected?
 => true
$ rails -v
Rails 5.2.3

我的config/database.yml文件必须很好,因为HTTP请求可以正常工作。

为什么我不能以这种方式在Rails控制台中建立连接?

我之所以问是因为我在establish_connection文件之一中有类似的config/initializers/用法,即正在配置https://stackoverflow.com/a/57737436/11849137个工作人员sneakers,并且还返回了{{ 1}}在false

2 个答案:

答案 0 :(得分:1)

要重新连接,您可以使用

ActiveRecord::Base.connect

AR仅对ActiveRecord :: Base调用一次build_connection。所有子类都使用一个连接。

您可以自己在某些子类上手动调用建立连接。一次使用两个数据库非常方便,例如

class MyMainUser < ActiveRecord::Base; end 
class MyOtherDb < ActiveRecord::Base; end
class MyOtherUser < MyOtherDb; end

MyOtherDb.establish_connection ...

MyMainUser.first # uses default db
MyOtherUser.first # uses other db
You can't do queries that would cross databases though.

答案 1 :(得分:1)

要进行连接,可以使用ActiveRecord :: Base.connection,然后可以调用Somemodel.first,它应该可以工作。