【问题标题】:ActiveRecord::ConnectionNotEstablished (No connection pool with 'primary' found.) when rendering results渲染结果时 ActiveRecord::ConnectionNotEstablished(未找到具有“主”的连接池。)
【发布时间】:2021-01-01 17:56:38
【问题描述】:

我正在开发 Rails 6.0 上的 API。应用程序中的一些模型连接到第二个数据库,这是 database.yml 中的设置:

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see Rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 50 } %>

test:
  primary:
    <<: *default
    database: tr_util_test
  trmain:
    <<: *default
    database: tr_test
    migrations_paths: db/trmain_migrate

development:
  primary:
    <<: *default
    database: tr_util_dev
  trmain:
    <<: *default
    database: tr_dev
    migrations_paths: db/trmain_migrate

还有模特:

class Appuser < TrBase
  ...
end

class TrBase < ActiveRecord::Base
  self.abstract_class = true
  connects_to database: { writing: :trmain, reading: :trmain }
end

还有控制器:

def show
  appuser_id = params[:id]
  user_details = Appuser.find_user_details(appuser_id: appuser_id)
  render json: user_details, status: 200
end

在测试中,find_user_details 方法运行没有任何问题,并且 user_details 设置为预期结果。但是,渲染中抛出了“ActiveRecord::ConnectionNotEstablished (No connection pool with 'primary' found.)”错误。

【问题讨论】:

    标签: ruby-on-rails activerecord rails-activerecord


    【解决方案1】:

    我能够通过添加“each_serializer: nil”来渲染来解决这个问题。似乎 Rails 没有到“primary”的连接池,因为这个端点只是连接到 :trmain db,但由于某种原因,render 想要从 primary 找到 ActiveRecord 序列化程序。

    def show
      appuser_id = params[:id]
      user_details = Appuser.find_user_details(appuser_id: appuser_id)
      render json: user_details, status: 200, each_serializer: nil
    end
    

    【讨论】:

      猜你喜欢
      • 2021-04-11
      • 2021-10-05
      • 2015-09-12
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2019-06-07
      • 2019-07-08
      • 2012-04-05
      相关资源
      最近更新 更多