Rails无法通过ActiveRecord::establish_connection连接到数据库

3
我正在打开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/文件中,它正在配置sneakers工作者像这样,并且那里也在 ActiveRecord::Base.connected?返回给我false.

2个回答

1
要连接数据库,您可以使用ActiveRecord::Base.connection,然后调用Somemodel.first,它应该能正常工作。

1
重新连接,您可以使用:

ActiveRecord::Base.connect

AR调用establish_connection仅一次,适用于ActiveRecord :: Base。所有子类都使用一个连接。

您可以在某些子类上手动调用establish 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.

没错,但应该是 ActiveRecord::Base.connection - ToTenMilan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接