我有一个Rails 7应用程序,我试图有条件地连接到不同的数据库。
下面是database.yml
development:
primary:
adapter: postgresql
database: development
host: localhost
user: postgres
password: root
main_red:
adapter: postgresql
username: etl
database: "<%= ENV['API_MAIN_DATABASE_NAME'] %>"
password: "<%= ENV['API_DATABASE_PASSWORD'] %>"
host: "<%= ENV['API_DATABASE_HOST'] %>"
database_tasks: false
main_blue:
adapter: postgresql
username: etl
database: "<%= ENV['API_MAIN_DATABASE_NAME'] %>"
password: "<%= ENV['API_DATABASE_PASSWORD'] %>"
host: "<%= ENV['API_DATABASE_HOST'] %>"
database_tasks: false
main_green:
adapter: postgresql
username: etl
database: "<%= ENV['API_MAIN_DATABASE_NAME'] %>"
password: "<%= ENV['API_DATABASE_PASSWORD'] %>"
host: "<%= ENV['API_DATABASE_HOST'] %>"
database_tasks: false
下面是模型定义
class ExternalRecord < ApplicationRecord
self.abstract_class = true
#establish_connection :main
connects_to database: {main_red: :main_red, main_green: :main_green, main_blue: :main_blue}
end
我想从main_red, main_green or main_blue
中执行读取,并在primary
数据库中执行插入。
下面是我的代码
ActiveRecord::Base.connected_to(role: :main_red) do
result = Api::V2::BulkExport.where(Tier: @tier, Version: 'v2').order(order).ransack(@params[:q]).result.limit(@limit)
end
track_usage(user_id: @user.id, end_point: request.path, rows_returned: result.count)
从数据库的阅读按预期工作,但看起来我无法连接回主数据库。我看到以下错误
ActiveRecord::ConnectionNotEstablished (No connection pool for 'ExternalRecord' found.):
任何帮助这将是伟大的,谢谢。
1条答案
按热度按时间c7rzv4ha1#
在您的代码中,您使用connects_to方法建立到不同数据库的连接。但是,在尝试连接回主数据库时,您似乎遇到了问题。
若要解决ActiveRecord::ConnectionNotEstablished错误,需要在执行需要主连接的代码之前显式建立到主数据库的连接。
可以按如下方式修改代码:
在修改后的代码中,外部块建立到main_red数据库的连接并执行查询。然后,在块中建立到主数据库的连接并执行插入。
通过在main_red连接块中显式地建立到主数据库的连接,您应该能够避免ActiveRecord::ConnectionNotEstablished错误并成功执行插入操作。